基于角色的ACL(访问控制列表)的应用
角色代表执行特定任务所需的权限和访问权限。一旦分配了角色,网站所有者就可以直观地分配、组合、移动和分配这些角色给系统中的用户。以下是在Joomla中应用角色的简单方法。
在上一篇文章中,我提出了基于角色的方法的证据,当网站由多个人管理时。角色使用直观。角色分配符合员工不断变化和不同的职责,并且精心设计的角色可以为用户提供刚好足够的访问权限和权限,而不多余。
基于角色的方法是一种从基于层级的方法的转变,我们在1.5中使用过,并且在2.5的ACL(访问控制列表)配置中默认使用。考虑传统的作者->编辑->发布者组。除了业务规则要求编辑始终是作者,发布者始终是编辑的情况外,没有这种继承的必要。相反,每个人都应该将Public组作为其父组,这样我们就可以为任何用户分配这些三个独立角色的任何配置。谁说发布者必须始终是作者!
基于角色的方法打破了基于层级的做法所接受的界限,并擦除了2.5中的这种界限。
随着我们应用角色,我们自由地创建新的组和访问级别,为我们的新组设置相对扁平的层次结构,并仅分配权限。在基于层级的结构中,这些做法似乎是不正确的。为了获得灵感,我们需要超越传统的ACL(访问控制列表)配置。以下是在Joomla中应用角色的方法。
确定您的客户需要的角色
确定系统中那些可能被分配给用户或在不同用户之间转移的职责。一个好的开始是针对每个组件进行思考,看看是否需要为它创建一个单独的角色。这可能过于简化,但鉴于角色通常与特定组件相关,这是一个好的起点。当然,有时某个角色可能负责多个组件或复杂组件的几个部分。在真正定义某个角色时,请确保在条件范围内定义,这样管理网站内容和用户的人都能理解。
为每个角色创建一个组
我们将使用Joomla用户组的[系统]来表示角色。每个角色都有自己的组。如果您定义了12个角色,您将添加12个新的用户组。每个组将赋予一组独特的权利和访问权限,仅此而已。您将使用的这个组的名称将是角色名称,您的客户在分配用户角色时将看到,所以请选择一个直观的名称,即使它需要几个词。
调整该组的层次结构
大多数角色将是其他角色的亲戚,层次结构不会很深。这与我们在1.5和2.5中看到的组继承不同,那里的亲戚组很少见,继承是常态。相比之下,大多数基于角色的组将共享同一个父级,因为大多数角色是相互独立的,并且可以指定用户任何组合的角色,而无需担心冲突。
假设基于角色的组是亲戚,但请记住,有两个常见的原因需要额外的继承级别:1)当多个组共享某些权利或访问级别时,创建一个代表这些共享权利或访问级别的父组是有意义的。2)当某个角色需要包含另一个角色的所有权利和访问权限,然后在此基础上扩展时,这个扩展角色应该从其基本角色继承。
通常,几个角色需要访问管理面板,这是创建允许进入管理面板的父组的好理由。所有管理面板角色都将共享它作为其父级。任何提供访问管理面板的组都需要注意两个设置。首先,转到常规设置,并为该组设置权利,以允许进入管理面板。其次,如果您想向这些用户显示管理菜单(对于某些网站,您可能不想这样做),则需要将这个新组添加到“特殊”访问级别。(为什么?因为管理菜单设置为“特殊”访问级别,您负责将您创建的任何组添加到适当的访问级别。)
不需要访问管理面板的角色可以共享“公共”或“注册”作为其父级,或者如果您认为这样做更直观,您可以创建一个名为“网站前端角色”的组,仅用于将所有网站前端角色收集在一个单独的父组下。
逐个分配权利
任何典型角色都仅限于一个组件。对于每个基于角色的组,进入相关的组件(们),并为这个基于角色的组提供必要的权利。一个组件只提供超级管理员、管理员和一个基于角色的组的权利是相当常见的。实际上,完全有理由撤销之前分配给管理员(甚至超级管理员)的权利,只留下这个基于角色的组作为唯一分配这些权利的组。
创建基于角色的访问级别
理解访问级别如何与访问控制列表(ACL)[访问控制列表]相结合是非常有用的。从机械的角度来看,访问级别不过是用户组的某种分组。在应用中,访问级别是一个用户必须满足的条件,以确定该用户是否是某个访问级别的成员(从而获得访问权限)。模块、菜单项、插件、类别以及每个对象都应该分配给某个访问级别。这种分配实际上是对规则的定义,它指导Joomla系统是否显示该对象或运行该插件——间接基于用户组的分配。
可能存在争议,即是否将不太明确的“访问级别”称为“访问规则”。虽然默认的访问级别集(公共、注册和特殊)被设置为代表三个“级别”,但在2.5版中,没有与访问级别相关联的级别分配。任何访问级别只宣布一组(以任何组合和不顾级别)。
我们将利用这个概念。如果网站的任何部分(类别、管理模块、菜单项等)只对被分配此角色的用户可用,那么我们将创建一个基于角色的访问级别,它只包含该组。目前,我们将其设置为一对一的关系,以便该访问级别在未来只向被分配此角色的用户提供访问权限。如果用户未分配此角色,则他们将无权访问。请注意,基于角色的访问级别并非总是需要,但如果您有机会进行仅在用户被分配到特定角色时才显示的更改,则您将需要相应的访问级别。
命名方法有助于我们管理可能变得相当复杂的列表。我为每个基于角色的访问级别添加了前缀“~”。由于访问级别按字母顺序排列,这有助于将基于角色的访问级别组合成一个组,并将其与传统的集合(公共、注册和特殊)分开。
缩短您的ACL [访问控制列表]
缩短是一种简化不必要的复杂和冗长的做法。在数学中,我们将15/25缩短为3/5。在编程中,我们缩短长代码,以便执行相同的功能,但行数更少,更容易处理。
在这里[ACL]中,我们评估我们创建的组和访问级别,并寻找它们如何可以合理简化。可能某些组集需要一个新的组作为某些父级的共同组来共享权限或访问级别。可能某些基于角色的访问级别实际上并不需要,或者可能需要将一个或多个[它们]合并为一个单一的访问级别。如果一切运行良好,您不需要缩短,但缩短您的ACL可能带来更直观的配置。
管理模块
基于角色的方法的最大的优点之一是,通过管理面板管理网站的人员将只能看到他们需要访问的控制面板。管理菜单不应该显示用户无权操作的项。强大的个性化管理面板的方法是创建每个角色一个管理模块,并将每个模块分配给相应的基于角色的访问级别。每个模块可以包含信息或快速调用链接,这些链接只对被分配到该级别的用户显示。管理面板将只显示与用户分配的角色相对应的模块。让我们下面举例说明。
将用户分配给角色
这是我们作为网站集成商的责任,创建并配置角色,使其符合公司对每个角色的理解。如果我们做得好,那么我们交付给客户的是一个非常直观的角色分配系统。这是一个简单的角色检查清单,每个角色都单独命名并分配了预期的权限。它就是这样简单。
可能不会立即明显的是,需要“用户管理员”角色。这个特殊的角色提供了创建用户、调整设置和分配基于角色的组的权限。根据基于角色的哲学,这个角色允许我们授予用户管理用户的权限,而无需将其提升为管理员。不要忘记创建这个角色。
结论
为了加强这种简单的方法,以下是一些创建用户管理角色的简单步骤。
- 创建一个新的组。命名为“用户管理”。其父组应该是提供对管理面板权限的组。如果您没有这样的组,创建这个父组,并授予它进入管理面板的权限,并将其添加到“特殊”访问级别。
- 分配必要的权限。在管理面板中,转到用户管理器页面,并选择页面右上角的“设置”。在“用户管理器(仅在“用户管理器”部分),除了“配置”外,允许所有权限。
- 访问级别。在这种情况下,我们不需要基于角色的访问级别,因为主菜单会自动显示给有权访问的用户。但是,如果您希望提供仅对用户管理员显示的行政模块,那么您需要为这个角色创建一个基于角色的访问级别。
- 将这个角色分配给某个用户。然后测试您的设置。以这个用户的身份登录到管理面板,观察我们为用户管理创建的简便性。
本文提供了一种快速的方法来配置Joomla系统中的角色。这并不困难,但应用基于角色的ACL(访问控制列表)确实需要新的视角。您准备好了吗?
译者注:本文是作者Randy Carey关于Joomla ACL系列文章的第二篇。不要忘记阅读第一篇翻译文章,“基于角色的ACL[访问控制列表]的论证”。
发表在Joomla社区杂志上的一些文章代表了作者对特定主题的个人观点或经验,可能并不与Joomla项目的官方立场一致。
通过接受,您将访问由 https://magazine.joomla.net.cn/ 外部的第三方提供的服务
评论