我将用一个简单的情况来解释:
在管理中,我想检查是否可以删除新闻类别。
何时控制?
如果我使用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;
}
我遇到了问题:
您无法删除,因为...
你能帮助我吗?
请记住,这种情况非常简单。在我的情况下,我有很多理由(> 10)拒绝删除或修改,几乎总是因为数据库中的关系
答案 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中添加了一个静态变量,并且可以在外部读取它。您可以轻而易举地制作一个可以添加到的数组(并在投票开始前清除),或者注意某些事情的原因,或者在可以检索的外部服务中没有发生的原因。