【发布时间】:2010-09-12 23:46:11
【问题描述】:
我正在考虑实现条件权限的最佳方式,即用户和团队是 m-to-m。但是每个 Team 也与 User 表有一对一的“Leader”关系。
为简单起见,假设我们有两个权限级别,“用户”和“管理员”。那么假设只有特定的团队管理任务,即群组电子邮件,只能由该团队的负责人发送。
目前,特定于团队负责人的每个操作都会查询数据库以检查当前用户是否是团队负责人(请记住,一个用户可能领导多个团队)。我个人不喜欢到处看到“if($user->isLeader($team))”。
我考虑过在登录时(ala phpBB)的用户会话中设置由用户领导的团队列表,或者使用 symfony 过滤器来做同样的事情。
但是,在第一种方法中,如果其他用户可能更换团队负责人,数据可能会变得陈旧。第二种方法需要在每次页面加载时进行额外的数据库查询。
有更好的想法吗? 注意:一个项目中有多个应用需要共享相同的权限模型(即后端和api)
【问题讨论】:
标签: symfony1 doctrine symfony-1.4 sfdoctrineguard