gpt4 book ai didi

symfony - 为用户动态添加角色

转载 作者:行者123 更新时间:2023-12-03 19:58:22 27 4
gpt4 key购买 nike

我们正在使用 Symfony2 的角色功能来限制用户对我们应用程序某些部分的访问。用户可以购买年度订阅和我们的每个 User实体有很多 Subscription具有开始日期和结束日期的实体。

现在,有没有办法根据用户是否有“事件”订阅动态地向用户添加角色?在 Rails 中,我只会让模型处理它是否具有必要的权限,但我知道 symfony2 实体在设计上不应该访问 Doctrine。

我知道您可以从实体实例中访问实体的关联,但这会通过 全部 用户的订阅对象,这对我来说似乎是不必要的麻烦。

最佳答案

我认为您最好设置自定义投票者和属性。

/**
* @Route("/whatever/")
* @Template
* @Secure("SUBSCRIPTION_X")
*/
public function viewAction()
{
// etc...
}
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
}
}

您需要配置和标记您的选民:
services:
subscription_voter:
class: SubscriptionVoter
public: false
arguments: [ @doctrine.orm.entity_manager ]
tags:
- { name: security.voter }

关于symfony - 为用户动态添加角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8879221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com