使用 Symfony-ACL 实现阻止列表

Implementing Block List using Symfony-ACL

场景如下: 我有一个页面列表,任何 ROLE_READER 的人都可以访问这些页面。 但是,某些特定读者不应访问或阅读某些特定书籍(即使 ROLE_READER)。

创建另一个角色(例如 ROLE_SPECIAL_READER)对用户来说不友好,因此不是一个选项。

因此,我认为我们需要某种黑名单控制。 我的问题是: - 这可以使用 Symfony-ACL 实现吗? - 如果是,那么我们该怎么做?

谢谢并致以最诚挚的问候。

这是一个简单的用例,我建议您使用 Voter 而不是 ACL,因为 document 表明对于这种用例来说可能有点过头了。

如果您使用投票器,您可以 write your custom voter 在那里您可以访问 User 对象以及 Page 对象,并且您可以决定哪些用户有权限,哪些用户没有权限't.

在内部,ACL 使用它自己的选民来检查权限。它有另一层将基于实体(ROLE、USER、OBJECT)的权限存储到数据库中并在需要时获取。

根据我的个人经验(医生也这么说),ACL 处理起来并不复杂。

使用选民的更多好处:

  1. 您可以根据项目分类/要求创建多个Voter
  2. 以后,如果您改变主意使用 ACL,则无需更改控制器中的代码。
  3. 易于调试且重量轻。

希望对你有帮助。