mai*_*ald 15 user-roles symfony
我们使用Symfony2的角色功能来限制用户访问我们应用的某些部分.我们的每个用户实体都有许多具有开始日期和结束的订阅实体,用户可以购买年度订阅.
现在,有没有办法根据用户是否拥有"有效"订阅动态添加角色?在rails中,我只是让模型处理它是否具有必要的权限,但我知道通过设计symfony2实体不应该访问Doctrine.
我知道你可以从一个实体实例中访问一个实体的关联,但是它会遍历所有用户的订阅对象,这对我来说似乎不那么麻烦.
Kri*_*ith 27
我认为你最好设置一个自定义选民和属性.
/**
* @Route("/whatever/")
* @Template
* @Secure("SUBSCRIPTION_X")
*/
public function viewAction()
{
// etc...
}
Run Code Online (Sandbox Code Playgroud)
该SUBSCRIPTION_X角色(又名属性)需要通过一个自定义的选民类进行处理.
class SubscriptionVoter implements VoterInterface
{
private $em;
public function __construct($em)
{
$this->em = $em;
}
public function supportsAttribute($attribute)
{
return 0 === strpos($attribute, 'SUBSCRIPTION_');
}
public function supportsClass($class)
{
return true;
}
public function vote(TokenInterface $token, $object, array $attributes)
{
// run your query and return either...
// * VoterInterface::ACCESS_GRANTED
// * VoterInterface::ACCESS_ABSTAIN
// * VoterInterface::ACCESS_DENIED
}
}
Run Code Online (Sandbox Code Playgroud)
您需要配置和标记您的选民:
services:
subscription_voter:
class: SubscriptionVoter
public: false
arguments: [ @doctrine.orm.entity_manager ]
tags:
- { name: security.voter }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7361 次 |
| 最近记录: |