我有一个CMS系统,管理员可以在其中创建用户组,并可以授予组执行某些操作的权限。权限(CRUD)被授予对象(即:可以添加帖子,可以编辑自己的帖子,可以删除别人的帖子,...)
很容易得出结论,我们应该使用类似提供的ACL和对象或类的存储权限。但是,问题是我们应该在哪里放置这些安全检查代码?
我想到的一件事就是将它放在控制器中,但现在它意味着我必须编辑我拥有的每个控制器,或者即使我不想以某种方式识别对象/类,特定控制器操作正在尝试修改。有时,控制器操作会同时涉及多个对象/模型,这会使事情变得更加复杂。
我也可以把它放在管理器中,这样每当我调用save()方法时,我都可以检查权限。出于某种原因,这种方法在性能和复杂性方面似乎是错误的。
我已经阅读了许多解释选民的帖子,acl等对于Symfony而且我理解了所有这些,但是我无法将所有这些都放到一个可以避免诸如编辑每个控制器之类的肮脏黑客的解决方案中。