Symfony 选民是否有优先权概念?

Symfony 选民是否有优先权概念?,symfony,silex,Symfony,Silex,我需要在一个门户网站上开发一个带有Silex框架(基于Symfony组件)的投票系统 这些不同的投票者将检查当前用户是否在好的国家,他是否加入了哪个节目,他是否激活了网站上的广告。。。我将它们与Unanime规则一起使用 但我也希望使用角色系统,我需要这个角色选民比其他人有更高的优先级 也就是说,如果选民弃权,那么其他选民可以通过协商一致的决定做出决定,在任何其他情况下,这就是我想要得到的协商一致的角色 Symfony是否提供了执行此操作的工具?我已经用matrix模拟了这些肯定和非即时决策管理

我需要在一个门户网站上开发一个带有Silex框架(基于Symfony组件)的投票系统

这些不同的投票者将检查当前用户是否在好的国家,他是否加入了哪个节目,他是否激活了网站上的广告。。。我将它们与Unanime规则一起使用

但我也希望使用角色系统,我需要这个角色选民比其他人有更高的优先级

也就是说,如果选民弃权,那么其他选民可以通过协商一致的决定做出决定,在任何其他情况下,这就是我想要得到的协商一致的角色


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