1
我想使用isGranted('EDIT',$ userObject)允許所有管理員和管理員以及一個用戶編輯給定的用戶數據。Symfony 2 ACL vs Voters
我應該使用ACL進行控制編輯$ userObject嗎? 我寫了額外的選民,檢查登錄的用戶和給定的對象是否相同或用戶是經理或管理員。
在acl中,我必須爲所有管理員,管理員和那個用戶添加ACE for userObject。
建議使用何種方式? 我在Symfony的新..
下面是選民的代碼:
function vote(TokenInterface $token, $object, array $attributes)
{
$intersect=array_intersect(array('EDIT','VIEW'), $attributes);
if (!empty($intersect))
{
//intersect is not empty, it seems to edit or view are in $attributes
//voter grants privileges for [user->granted object]
//manager->every customer, child-manager
//admin->every customer and manager
if ($token->getUser()->isAdmin())
{
return VoterInterface::ACCESS_GRANTED;
}
elseif ($token->getUser()->isCustomer())
{
//voter not want to think about customer grants, because customer grants currently are held in ACL
return VoterInterface::ACCESS_ABSTAIN;
}
/* @var $object \PSB\StoreBundle\Entity\Customer */
if (is_a($object, '\PSB\StoreBundle\Entity\Customer'))
{
if ($token->getUser()->isManager())
{
//managers also edit customers
return VoterInterface::ACCESS_GRANTED;
}
}
elseif (is_a($object, '\PSB\StoreBundle\Entity\Manager'))
{
/* @var $object \PSB\StoreBundle\Entity\Manager */
if ($token->getUser()->isManager())
{
//manager can edit own children
if ($token->getUser() == $object->getParent())
{
return VoterInterface::ACCESS_GRANTED;
}
}
}
}
return VoterInterface::ACCESS_ABSTAIN;
}
感謝的instanceof也提示:P 的方式,wchich這樣我可以通過類作爲參數? 使用\ My \ package \ Class; - function_getting_class_param(Class); – borovsky
我知道這是一個古老的,但神聖的善良,它仍然是一個偉大的和相關的答案。 – vpassapera