设计一个用户访问/权限类

问题描述:

我正在一个网站上工作,这个网站有几个模块可以完全适用于某些用户,半其他用户可用,其余用户不可用。设计一个用户访问/权限类

例如:

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

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

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

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

我想创建一个“权限”模式,将会处理逻辑:

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

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

我需要一些建议/建议来设计这个类,特别是它应该有什么方法来完成第二个要求。

我已经接触到这个问题的方式出现时,是给每个可以采取的行动或信息,可以显示它自己Permission。然后每个User具有Permissions的集合。由此,您可以添加其他层次的结构来帮助管理将存在的大量权限,例如层次结构或权限类别。

一旦到位,你可以有各种零件问User如果他们有需要的权限(S),或者你可以有一个PermissionManager采取User和一组Permissions并确定给定用户有需要的Permissions。无论哪种方式都可以正常工作,但您选择哪一种方法会影响依赖性和系统架构。

PermissionManager方法有您的应用程序块并不需要依赖于User的优势,所以你可以使用不同的PermissionManager总是返回False如果没有权限是适当的,或者True如果所有权限是适当的。

对于简单的情况,这种方法可能是矫枉过正的,它通常看起来像是一开始,但我走了使用基本的分层或粗粒度角色的路线,并且喜欢几乎每个我工作过的系统对于大多数香草,预构建的基于角色的许可系统而言,很快就变得复杂了。

+0

@cdeszaaq如何/在应该这些权限被存储?他们怎样才能组织成分类/分类?另外,应该使用什么样的命名约定来标识它们的权限? – 2011-04-18 18:47:43

+0

@Click Upvote - 假设您使用的是数据库,则权限将全部存储在那里,这与存储任何其他数据结构的方式相同。对于命名约定,任何有意义的东西只要你一致就可以工作,但我倾向于遵循一种“canDoX”类型的权限名称有某种动词的样式。 – cdeszaq 2011-04-18 18:57:38

+0

@click upvote虽然我认为你早已超越你可能想研究RBAC – xenoterracide 2011-06-18 00:08:28

我的印象是,你需要利用角色,例如员工,经理和管理员。所以与这些角色表会做。那么对于特定的操作/权限,您将不得不使用分支逻辑,例如,如果User.IsInRole(“employee”) //插入逻辑来处理客户支持凭单 ,否则用户将拥有 .IsInRole(“经理”) //插入逻辑处理经理职责

终于逻辑来处理管理职责

所以你需要两个用户表和角色表来实现这一目标。 希望它有帮助

我从数据库的角度来看待这个问题的方法是让用户表包含用户列表,角色列表的角色表,例如:employee,manager,admin;权限表,它存储系统中可用的每个动作/功能的所有值及其对特定角色的权限,例如,对于管理员来说,诸如创建,编辑,删除,视图等动作/功能的值都是真实的。关系可以在下面看到,而(N)----(N)是多对多的关系。

用户(N)-------(N)的作用(N)--------(N)许可