Symfony选民和倍数的原因

时间:2017-10-07 13:17:41

标签: php symfony symfony-3.3 symfony-security

我将用一个简单的情况来解释:

  • 我有“新闻”实体
  • 我有“新类别”实体

在管理中,我想检查是否可以删除新闻类别。

  • 如果您没有“ROLE_SUPERADMIN”,则不能;
  • 如果新闻类别与(=在类别中使用)相关联,则不能

何时控制?

如果我使用Symfony选民:

class NewsCategoryVoter extends Voter {

    ....

    private function canDelete(NewsCategory $newsCategory, User $user)
    {
        // Check ROLE and Count in NewsRepository if $newsCategory is used. I have not yet coded this.
        return false;
    }

我遇到了问题:

  • 我无法理解他无法移除的原因。在twig和 is_granted('删除',类别)之后,想要:
  

您无法删除,因为...

你能帮助我吗?

请记住,这种情况非常简单。在我的情况下,我有很多理由(> 10)拒绝删除或修改,几乎总是因为数据库中的关系

1 个答案:

答案 0 :(得分:0)

因为Voter只是另一项服务,你可以添加你想要或需要的任何属性或其他类/服务,以便存储某些原因,或者为什么没有发生。

public static $reason;

// in the voter, make grant/deny/abstain choices...
if ($user->hasRole('ROLE_SUPER_ADMIN')) {
    self::$reason = "is super-admin";
    $this->log->debug("FeatureVoter | {$user} is super-admin");
    return VoterInterface::ACCESS_GRANTED;
}

// after is_granted()
echo VoterClass::$reason;

我已经登录了选民,因此其他一些通知机制也同样容易。在这里,我刚刚在Voter中添加了一个静态变量,并且可以在外部读取它。您可以轻而易举地制作一个可以添加到的数组(并在投票开始前清除),或者注意某些事情的原因,或者在可以检索的外部服务中没有发生的原因。