рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕рд┐рдореНрдлрдиреА 2 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рдВрд╕рд╛рдзрди-рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдЗрддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ Symfony2 рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдерд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ Zend1 рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдореГрджреНрдз рдЕрдиреБрднрд╡ рдерд╛, рдкреНрд░рд╡реЗрд╢ рдХреА рдмрд╛рдзрд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдереАред рдкрд░реНрдпрд╛рдкреНрдд рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рдкрд░рд┐рд╕реАрдорди рдХреЗ рдореБрджреНрджреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдереАрдВред рд▓рдЧрднрдЧ рдореЗрд░реА рд╕рднреА рдЦреЛрдЬреЛрдВ рдиреЗ рдореБрдЭреЗ FOSUserBundle рдпрд╛ рд╕реВрдЪрдирд╛ рдХреЗ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдорд╛рдирдХ рд╡рд┐рддрд░рдг рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореБрдЭреЗ рднрд╛рд░реА FOSUserBundle рдореЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Symfony2 Security рдХреЛ рдХреИрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ред рд▓рдХреНрд╖реНрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдерд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрддрд░ рдкрд░ рд╕рд┐рдореНрдлрдиреА 2 + рд╕реБрд░рдХреНрд╖рд╛ + рдкрд╣реБрдВрдЪ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд┐рднреЗрджреАрдХрд░рдгред рдпрд╣ рд▓реЗрдЦ рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рд╕рдВрдЪрдпреА рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХрд╛рд░ рдпреЛрдЬрдирд╛: рд╕рдм рдХреБрдЫ рдЬреЛ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдПрдХ рднреВрдорд┐рдХрд╛ рд╕рдЦреНрдд рд╣реИред рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдПрдХ рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдХреЛрдб рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЕрдореВрд░реНрдд рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рд╕рд░реНрд╡рд┐рд╕рд┐рдВрдЧ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдСрд░реНрдбрд░-рдСрд░реНрдбрд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рддреЛ рдмрд╛рдд рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ , рдПрдХ рдмреИрдХрдПрдВрдбрд╡рд░реНрдХрдСрд░реНрдбрд░рдмрдВрдбрд▓ рдЗрд╕рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рднреА рд░рд╛рдЙрдЯрд░ рдФрд░ рдлрд╛рдпрд░рд╡реЙрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╛рдиреА рдкрд╣реБрдБрдЪ рдЕрдзрд┐рдХрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рдм рдХреБрдЫ рд╣реИред рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП, MySQL рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмрдврд╝рд┐рдпрд╛ рд╕рд╛рдорд╛рдиред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреА рд╣реИ:

-- ----------------------------------------------------- -- Table `backend_role` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `backend_role` ( `role_id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(45) NULL, `description` VARCHAR(45) NULL, PRIMARY KEY (`role_id`)) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `backend_user` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `backend_user` ( `user_id` INT NOT NULL AUTO_INCREMENT, `role_id` INT NOT NULL, `firstname` VARCHAR(45) NULL, `lastname` VARCHAR(45) NULL, `printname` VARCHAR(45) NULL, `username` VARCHAR(45) NULL, `salt` VARCHAR(255) NULL, `password` VARCHAR(255) NULL, `created` DATETIME NULL, `updated` DATETIME NULL, `last_login` DATETIME NULL, `is_active` TINYINT(1) NULL, PRIMARY KEY (`user_id`), INDEX `fk_backend_user_backend_role1_idx` (`role_id` ASC), CONSTRAINT `fk_backend_user_backend_role1` FOREIGN KEY (`role_id`) REFERENCES `parts`.`backend_role` (`role_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `backend_rule` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `backend_rule` ( `rule_id` INT NOT NULL AUTO_INCREMENT, `role_id` INT NOT NULL, `resource_id` VARCHAR(255) NULL, `privileges` TEXT NULL, PRIMARY KEY (`rule_id`), INDEX `fk_backend_rule_backend_role1_idx` (`role_id` ASC), CONSTRAINT `fk_backend_rule_backend_role1` FOREIGN KEY (`role_id`) REFERENCES `parts`.`backend_role` (`role_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; 

рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ:
1. рдЯрд╣рдиреА рд╕реЗ is_granted('[ ]', [])
2. рдирд┐рдпрдВрддреНрд░рдХ $this->get('security.context')->isGranted('[ ]', []) рд╕реЗ $this->get('security.context')->isGranted('[ ]', [])
рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдпрд╣ рдорддрджрд╛рддрд╛ рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ HTML рдкреГрд╖реНрда рд╕реЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рд╡реЛрдЯрд░ рдХреЛрдбред рдореИрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдФрд░ рдмреИрдХрдПрдВрдбрдХреЛрд░рдмрдВрдбрд▓ рдмрдВрдбрд▓ рд╣реИ рдЬреЛ рдкреВрд░реЗ рдмреИрдХреЗрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИред рдорддрджрд╛рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдБ рдФрд░ рдкрдврд╝реЗрдВред
 <?php // /src/Backend/CoreBundle/Security/Authorization/Voter/PrivilegeVoter.php namespace Backend\CoreBundle\Security\Authorization\Voter; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; class PrivilegeVoter implements VoterInterface { public function supportsAttribute($attribute) { return true; } public function supportsClass($class) { return in_array($class, array( 'Backend\WorkorderBundle\Entity\Workorder' )); } public function vote(TokenInterface $token, $object, array $attributes) { //  voter    . //           . if ( !($this->supportsClass(get_class($object))) ) { return VoterInterface::ACCESS_ABSTAIN; } foreach ($attributes as $attribute) { //      if ( !$this->supportsAttribute($attribute) ) { return VoterInterface::ACCESS_ABSTAIN; } } //   $user = $token->getUser(); $privileges = $user->getPrivileges(); $resourceId = $object->getResourceId(); $acess_granted = false; foreach ($attributes as $attribute) { if (isset($privileges[$resourceId])) { $resource_privileges = $privileges[$resourceId]; if (in_array($attribute, $resource_privileges)) { $acess_granted = true; } else { $acess_granted = false; break; } } } if ($acess_granted) return VoterInterface::ACCESS_GRANTED; return VoterInterface::ACCESS_DENIED; } } 


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП getPrivileges рдлрд╝рдВрдХреНрд╢рди рдмреИрдХрдПрдВрдб_рдпреВрдЬрд╝рд░ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
 <?php ///src/Backend/CoreBundle/Entity/BackendUser.php namespace Backend\CoreBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Security\Core\User\AdvancedUserInterface; /** * BackendUser * * @ORM\Table(name="backend_user") * @ORM\Entity */ class BackendUser implements AdvancedUserInterface, \Serializable { .. public function getPrivileges() { //  : backend_user->backend_role->backend_rule // $rule->getPrivileges()    privileges  backend_rule //         resource_id, //         (  ) $rules = $this->getRole()->getRules(); $result = array(); foreach ($rules as $rule){ $result[$rule->getResourceId()] = explode(",", $rule->getPrivileges()); } return $result; } .. } 


рдорддрджрд╛рддрд╛ рдХреЛ /app/config/security.yml рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

 services: security.access.privilege_voter: class: Backend\CoreBundle\Security\Authorization\Voter\PrivilegeVoter public: false tags: - { name: security.voter } 

рдЖрдкрдиреЗ рд╢рд╛рдпрдж рджреЗрдЦрд╛ рдХрд┐ $ object-> getResourceId () рдХреЛ рд╡реЛрдЯ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреА рд╣реИ
 <?php // /src/Backend/WorkorderBundle/Entity/Workorder.php namespace Backend\WorkorderBundle\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\ORM\Mapping as ORM; /** * Workorder * * @ORM\Table(name="workorder") * @ORM\Entity */ class Workorder { .. public function getResourceId() { //           //   Backend\WorkorderBundle\Entity\Workorder return \Doctrine\Common\Util\ClassUtils::getClass($this); } .. } 


рдпрд╣ рдмрд╛рдд рд╣реИ! рдЖрд▓реЛрдЪрдирд╛ рдХрд╛, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЛрдИ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХрдорд┐рдпреЛрдВ рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреАред

Source: https://habr.com/ru/post/In203358/


All Articles