Witam,
piszę projekt w Symfony2 i chciałem użyć ACL, gdyż jest to dlaczego by nie skorzystać ?
Włączyłem acl, napisałem przy dodawaniu taki otoż kod:
if ($form->isValid()) { $securityContext = $this->get('security.context'); $user = $securityContext->getToken()->getUser(); // get current user $project->setAuthor($user); $entityManager = $this->get('doctrine.orm.default_entity_manager'); $entityManager->persist($project); $entityManager->flush(); // creating the ACL $aclProvider = $this->get('security.acl.provider'); $objectIdentity = ObjectIdentity::fromDomainObject($project); $acl = $aclProvider->createAcl($objectIdentity); // retrieving the security identity of the currently logged-in user $securityIdentity = UserSecurityIdentity::fromAccount($user); // grant owner access $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); $aclProvider->updateAcl($acl); $this->get('session')->setFlash('info', $this->tr('Project created')); return $this->redirect($this->generateUrl('projects_list')); }
Tutaj masz opisane jak sprawdzać czy zalogowany użytkownik ma prawo do tego obiektu. Oczywiście biorąc pod uwagę ze używasz standardowego providera użytkownika.
http://symfony.com/doc/current/cookbook/security/acl.html#checking-access
Co do drugiego pytania, nie widzę żadnej różnicy, nie potrzeba robić żadnych grup jeśli tylko indywidualni użytkownicy maja dostęp do obiektu, wiec zastosowanie takie samo.
witam,
to moje drugie podejście do ACL'a i przyznam, że nie wszystko rozumiem. Chcę wykonać następujące czynności:
1. Tworzenie nowego użytkownika - czy tutaj muszę jakoś zainicjować dla niego obiekt ACL? Coś na wzór:
$securityContext = $this->container->get('security.context'); $securityIdentity = UserSecurityIdentity::fromAccount($user); $aclProvider->updateAcl($acl);
// creating the ACL $aclProvider = $this->get('security.acl.provider'); $objectIdentity = ObjectIdentity::fromDomainObject($project); $acl = $aclProvider->createAcl($objectIdentity); // retrieving the security identity of the currently logged-in user $securityContext = $this->get('security.context'); $user = $securityContext->getToken()->getUser(); $securityIdentity = UserSecurityIdentity::fromAccount($user); // grant owner access $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_OWNER); $aclProvider->updateAcl($acl);
// creating the ACL $aclProvider = $this->get('security.acl.provider'); $objectIdentity = ObjectIdentity::fromDomainObject($project); $acl = $aclProvider->createAcl($objectIdentity); // retrieving the security identity of the currently logged-in user $securityContext = $this->get('security.context'); $user = $securityContext->getToken()->getUser(); $securityIdentity = UserSecurityIdentity::fromAccount($user); // grant owner access $acl->insertObjectAce($securityIdentity, MaskBuilder::MASK_VIEW); $aclProvider->updateAcl($acl);
Ad. 1. Nie wiek co jest w zmiennej $acl. Generalnie nie musisz tworzyć ACL przy rejestracji. Twój kawałek kodu działa mniej więcej tak, że chcesz sterować dostępem do encji użytkownika.
Ad. 3. Tutaj moim zdaniem powinno być findAcl.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)