Symfony 选民是否有优先权概念?
我需要在一个门户网站上开发一个带有Silex框架(基于Symfony组件)的投票系统 这些不同的投票者将检查当前用户是否在好的国家,他是否加入了哪个节目,他是否激活了网站上的广告。。。我将它们与Unanime规则一起使用 但我也希望使用角色系统,我需要这个角色选民比其他人有更高的优先级 也就是说,如果选民弃权,那么其他选民可以通过协商一致的决定做出决定,在任何其他情况下,这就是我想要得到的协商一致的角色Symfony 选民是否有优先权概念?,symfony,silex,Symfony,Silex,我需要在一个门户网站上开发一个带有Silex框架(基于Symfony组件)的投票系统 这些不同的投票者将检查当前用户是否在好的国家,他是否加入了哪个节目,他是否激活了网站上的广告。。。我将它们与Unanime规则一起使用 但我也希望使用角色系统,我需要这个角色选民比其他人有更高的优先级 也就是说,如果选民弃权,那么其他选民可以通过协商一致的决定做出决定,在任何其他情况下,这就是我想要得到的协商一致的角色 Symfony是否提供了执行此操作的工具?我已经用matrix模拟了这些肯定和非即时决策管理
Symfony是否提供了执行此操作的工具?我已经用matrix模拟了这些肯定和非即时决策管理的案例,但我没有发现如何使投票者角色比其他角色更重要。您可以为投票者设置优先级:
your_voter:
class: # ...
public: false
arguments:
# ...
tags:
- { name: security.voter , priority: 255 }
实际上,您必须编写自己的
AccessDecisionManager
来执行它:
就我而言,我需要RoleHierarchyVoter
覆盖其他投票,除非它弃权。如果它弃权,我将采用一致的策略:
class AccessDecisionManager implements AccessDecisionManagerInterface {
private $voters;
public function __construct(array $voters) {
$this->voters = $voters;
}
public function decide(TokenInterface $token, array $attributes, $object = null) {
$deny = 0;
foreach ($this->voters as $voter) {
$result = $voter->vote($token, $object, $attributes);
if ($voter instanceof RoleHierarchyVoter) {
if ($result === VoterInterface::ACCESS_GRANTED)
return true;
elseif ($result === VoterInterface::ACCESS_DENIED)
return false;
else
continue;
}else {
if ($result === VoterInterface::ACCESS_DENIED)
$deny++;
}
}
if ($deny > 0)
return false;
else
return true;
}
}
要注册我的自定义AccessDecisionManager:
$app['security.access_manager'] = $app->share(function (Application $app) {
return new AccessDecisionManager($app['security.voters']);
});
文档中是否有指向此功能的链接?@Fractaliste