我们正在构建一个管理实习的应用程序(例如“实习医师二级医师”)。该应用程序正在Symfony2中构建。 我们有可以有一个或多个角色的用户(例如教练也可以是主管)。在下面的例子中使用 角色是:我们应该使用选民还是ACL?两者的优点和缺点是什么?任何陷阱?
- 学生(明显)
- 管理员(管理实习)
- 主管(公司中的学生的导师)
- 教练(教练一组学生在某个实习中)
角色不限于上面提到的那些。
什么样的权限中的一些例子,我们有:
- 有时它是一样简单:与角色“管理员”的所有用户都可以访问某个页面。但在99%的情况下,它并不像这样简单。
- 所有用户都可以查看词汇表项目,但只能查看以某种方式链接到用户链接到的教师的项目。例如,一个学生与一个与某个教师相关的实习相关联。主管以同样的方式与实习相关联。具有“管理员”角色的用户只是某个教职员工的教员协调员。因此,有一大堆规则决定用户是否与一个或多个院系相关联。
- 学生可以为他/她所关联的实习提供他的偏好,但只有在该实习有特定日期的情况下以及在该实习的某些指定日期之间给予优先。
- 主管可以向学生发送邮件,但只有分配给他/她的学生。
- 教练可以看到学生的详细信息,但只有他/她执教的学生。管理员有权将学生分配给教练。
- ...
正如你所看到的许可制度不仅限于具有特定角色的用户,并具有一定权限的实体的作用。有时它会更复杂一些,权限仅限于一部分数据。 注意,我们每年将有大约5000名学生和4000名主管使用该应用程序。学生数据库每年将增加1000+。
我的问题:我们应该使用选民,ACL,两者的组合,......?有什么优点和缺点?有没有什么陷阱?
欢迎任何建议!
也没有,因为2。6,选民已经变得更容易实施:http://symfony.com/blog/new-in-symfony-2-6-simpler-security-voters –