我们应该使用 Voters 还是 ACL?两者的 advantages/disadvantages 是多少?有什么陷阱吗?
Should we use Voters or ACL? What are the advantages/disadvantages of both? Any pitfalls?
我们正在构建一个应用程序来管理实习(例如“Internship 2nd master Medicine”)。该应用程序正在 Symfony2 中构建。
我们的用户可以担任一个或多个角色(例如教练也可以是主管)。
以下示例中使用的角色是:
- 学生(显而易见)
- 管理员(管理实习)
- 主管(某公司学员的导师)
- Coach(在某实习中指导一群学生)
角色不限于上述。
我们拥有何种权限的一些示例:
- 有时候很简单:所有具有“管理员”角色的用户都可以访问某个页面。但是在99%的情况下都不是这么简单。
- 所有用户都可以查看词汇表项,但只能查看那些链接到用户以某种方式链接到的学院的项目。例如,学生与实习相关联,实习与特定教员相关联。主管以相同的方式与实习相关联。具有“管理员”角色的用户仅是特定教员的教员协调员。所以有一大堆规则决定一个用户是否链接到一个或多个院系。
- 学生可以给出他对 he/she 链接的实习的偏好,但前提是该实习有偏好,并且在该实习的特定指定日期之间。
- 主管可以给学生发邮件,但仅限分配给 him/her 的学生。
- 教练可以查看学生的详细信息,但只有 he/she 的学生是教练。管理员有权将学生分配给教练。
- …
如您所见,权限系统不仅限于具有特定角色的用户,而且角色对实体具有特定权限。有时它会更复杂一些,权限仅限于数据的一个子集。
请注意,我们每年将有大约 5000 名学生和 4000 名导师使用该应用程序。学生数据库每年都会增长1000+。
我的问题:我们应该使用 Voters、ACL,还是两者的结合……?有什么优点和缺点?有什么陷阱吗?
欢迎任何建议!
使用选民。 ACL 组件 has been extracted from Symfony core (Symfony 2.8/3.0) 因为它没有得到积极维护并且(太)复杂了。
对于选民来说一切都是可行的,现在它是新项目的推荐方式。
ACL 太复杂了,就像 Kévin 所说的那样,它会脱离 symfony 核心。选民是要走的路,简单得多,也足够强大。
我们正在构建一个应用程序来管理实习(例如“Internship 2nd master Medicine”)。该应用程序正在 Symfony2 中构建。 我们的用户可以担任一个或多个角色(例如教练也可以是主管)。 以下示例中使用的角色是:
- 学生(显而易见)
- 管理员(管理实习)
- 主管(某公司学员的导师)
- Coach(在某实习中指导一群学生)
角色不限于上述。
我们拥有何种权限的一些示例:
- 有时候很简单:所有具有“管理员”角色的用户都可以访问某个页面。但是在99%的情况下都不是这么简单。
- 所有用户都可以查看词汇表项,但只能查看那些链接到用户以某种方式链接到的学院的项目。例如,学生与实习相关联,实习与特定教员相关联。主管以相同的方式与实习相关联。具有“管理员”角色的用户仅是特定教员的教员协调员。所以有一大堆规则决定一个用户是否链接到一个或多个院系。
- 学生可以给出他对 he/she 链接的实习的偏好,但前提是该实习有偏好,并且在该实习的特定指定日期之间。
- 主管可以给学生发邮件,但仅限分配给 him/her 的学生。
- 教练可以查看学生的详细信息,但只有 he/she 的学生是教练。管理员有权将学生分配给教练。
- …
如您所见,权限系统不仅限于具有特定角色的用户,而且角色对实体具有特定权限。有时它会更复杂一些,权限仅限于数据的一个子集。 请注意,我们每年将有大约 5000 名学生和 4000 名导师使用该应用程序。学生数据库每年都会增长1000+。
我的问题:我们应该使用 Voters、ACL,还是两者的结合……?有什么优点和缺点?有什么陷阱吗?
欢迎任何建议!
使用选民。 ACL 组件 has been extracted from Symfony core (Symfony 2.8/3.0) 因为它没有得到积极维护并且(太)复杂了。
对于选民来说一切都是可行的,现在它是新项目的推荐方式。
ACL 太复杂了,就像 Kévin 所说的那样,它会脱离 symfony 核心。选民是要走的路,简单得多,也足够强大。