设计用户访问/权限类

时间:2011-04-18 14:03:02

标签: oop design-patterns architecture user-permissions

我正在开发一个网站,该网站将有几个模块可供某些用户完全使用,半可供其他用户使用,其他用户无法使用。

例如:

  • “员工”能够回复分配给他的客户支持票。

  • “经理”能够管理所有员工并支持团队中的门票,包括查看特定员工的门票。

  • “管理员”能够管理所有团队中的所有经理,员工和门票,以及其他一些核心功能。

此外,在某些页面上,如果当前用户是管理员或经理,则会显示一些其他字段。 (例如删除/标记事物的链接)。这些不会向员工展示。

我想创建一个'权限'模型,它将处理以下逻辑:

  • 确定用户是否可以访问当前页面。

  • 确定是否应显示页面的特定部分。 (例如,编辑/删除的特殊链接仅显示给管理员和经理。)

我需要一些建议/建议来设计这个课程,特别是为了完成第二个要求应该有哪些方法。

3 个答案:

答案 0 :(得分:3)

我遇到这个问题的方法是给出可以采取的每个动作或可以显示它自己Permission的信息。然后,每个User都有一个Permissions的集合。从这里,您可以添加其他结构层来帮助管理将存在的大量权限,例如层次结构或权限类别。

一旦到位,您可以让各个部分询问User他们是否拥有所需的权限,或者您可以PermissionManager采取User和一组Permissions并确定给定用户是否具有所需的Permissions。无论哪种方式都可以正常工作,但您选择哪一种方式会对依赖关系和系统架构产生影响。

PermissionManager方法的优势在于您的应用程序部分不需要依赖User,因此您可以使用始终返回PermissionManager的其他False如果没有合适的权限,或True如果所有权限都合适。

对于简单的情况,这种方法可能有点矫枉过正,而且通常看起来似乎是最初的,但我已经走了使用基本的分层或粗粒度角色的路线,并且喜欢几乎我所使用的每个系统对于大多数预先构建的基于角色的权限系统而言,很快变得过于复杂。

答案 1 :(得分:3)

从数据库的角度来看,我解决这个问题的方法是拥有一个用户表来保存用户列表,一个角色列表的角色表,例如:employee,manager,admin;和权限表,存储系统中可用的每个操作/功能的所有值及其对特定角色的权限,例如:对于admin,创建,编辑,删除,查看等操作/功能的值都是真的。关系可以在下面看到,而(N)----(N)是多对多的关系。

用户(N)-------(N)角色(N)--------(N)权限

答案 2 :(得分:0)

我的印象是你需要利用角色,例如:员工,经理和管理员。所以这些角色表就可以了。然后,对于特定的操作/权限,您必须使用分支逻辑,例如,您将拥有的员工 如果User.IsInRole(“员工”) //插入逻辑来处理客户支持票据 否则如果User.IsInRole(“经理”) //插入逻辑来处理经理职责

最后处理管理职责的逻辑

因此,您需要users表和roles表来实现此目的。 希望它有所帮助