从现在开始,这就是你向别人解释你的新网站时可以说的话。是的,我们终于找到了解决 Joomla 中访问管理问题的方法,而且它已经在主分支中实现。
Joomla 到目前为止最大的弱点之一就是缺少对谁能在 Joomla 中做什么的控制。你只有这三个查看级别(公开、注册、特别)和七个具有固定、全局权限的用户组。新的用户组?将用户组限制在只有一个分类中?在 Joomla 中至今不可能。这是一个困扰我们所有人多年的问题,也是我最初对帮助 Joomla 项目和进行开发产生兴趣的原因。那已经是四年前的事了。甚至在那时之前,Andrew Eddie 已经在这个问题上工作了两年。所以这真的有一个很长的历史。
你们中的一些人可能认为我们把这个问题夸大了。是的,你可以简单地加入一个访问管理解决方案,希望它能工作,人们可以使用它。另一方面,我们有一个庞大的开发者社区,Joomla 被用在各种不同的场景中。如果管理员学过计算机科学,并且网站没有访问者,那么真的没有人关心访问管理的外观和速度。但我们目标是相反的。我们希望让这个系统易于使用,这样每个人都可以使用它,同时你不会感觉到任何性能问题。这需要时间。
截至昨晚,我们终于找到了一个解决方案,它提供了最大的灵活性,四岁的孩子也能使用,并且对性能几乎没有可衡量的影响。我一直都在谈论“我们”,在我深入系统的具体细节之前,我想解释一下这个“我们”是谁。有几个人对这个发展有直接或间接的影响。在Joomla开发邮件列表上提出了很多想法,我想感谢所有参与这些讨论的人。我还要感谢Mike Benoit,他写了phpGACL,这是我们许多想法的基础,并为我们探索不同的解决方案提供了极大的灵感。直接参与这个解决方案的最终开发(因此值得额外一轮掌声)的人有:Louis Landry、Andrew Eddie、Rob Schley、Sam Moffatt、Ron Severdia、Ercan Özkaya、Gergo Erdosi和我。也要感谢所有我们就此问题进行过启发性的谈话并提供了新见解的人。
好的,现在来到有趣的部分:它是如何工作的?和大多数好而美丽的系统一样,想法很简单。首先,你当然现在可以创建新组并将用户分配到多个组。这些组以树状形式组成,这意味着如果你是“管理员”组的成员,你会自动继承下方“经理”组的访问权限。基本上你创建用户组的权限没有限制,但我们很可能会将“公共”、“注册”和“超级管理员”这几个组固定下来,以确保没有人不小心摧毁了他的整个网站并且无法再访问任何内容。
现在我们想为这些组分配访问权限。我们想允许一个组创建文章、网页链接、新闻源以及Joomla中可以创建的几乎所有内容。我们不想让他们发布任何内容,所以我们给他们全局的“创建”权限,但不给“编辑状态”权限。然而,他们应该能够发布文章,所以我们进入全局偏好的文章管理器中的“权限”选项卡。在那里我们看到和全局权限屏幕上相同的权限。我们为这个组选择“编辑状态”权限,现在这个组可以在系统中任何地方创建内容,但只能发布文章。我们还希望他们能够在特定分类中删除文章。为此,我们编辑该分类,再次看到和全局权限屏幕以及全局偏好屏幕上相同的权限,然后允许他们删除文章。
现在这个组权力相当大。记住,我们允许他们在每个组件中创建内容。但也许我们不想让他们能够创建模块。这很简单,我们只需进入模块管理器,而不是让它继承全局的“创建”权限,我们在该组件中拒绝这个组的这个权限。所以,你不仅可以从全局设置权限到单个内容项,还可以将它们都设置为“允许”或“拒绝”。
虽然这个系统涵盖了网站的所有管理任务,但我们还有一个“小”领域剩下:查看权限。在Joomla 1.6之前,你有三个查看级别:“公共”、“注册”和“特殊”。在Joomla 1.6中,你也会有这些,但你还将能够向这个列表中添加额外的查看级别,特别是选择谁应该能够看到这些。
现在我们已经涵盖了终端用户的基本功能,下面为技术感兴趣的观众提供更多信息:系统在数据库层面上是如何工作的?权限的基础是#__assets表。这个表是基于嵌套集模型构建的,首先有一个根节点,用于系统范围的权限。这个根节点的直接子节点是我们已经安装的不同组件。如果该组件有内容(与系统工具如文件管理器等不同),每个内容项在组件节点下的相应树中都有一个子节点。在每行中,我们有一个JSON编码的权限数组。如果您访问一个内容项,将加载相应的节点,并且完整的三节点树(包括根节点)也将随之加载。现在,这个内容项沿着整条线继承权限。查看级别要简单一些。我们只使用一个JSON编码的用户组ID数组,该数组允许查看此查看级别。
此刻,您很可能在问自己:“将所有这些添加到自己的组件中会多复杂?”在这里的这篇文章中解释这一切可能有些过多,但让我向您保证,这非常简单。我们当然会编写关于这方面的优秀文档,有了这个文档,您不应该花超过一个小时就能让您的组件运行起来。
我对这一切感到非常兴奋,因为在过去几天里,我们在开发和决策上迈出了巨大的步伐,尽管还有一些工作要做,但我们离Joomla 1.6的发布已经近了很多。很快我们就可以宣布开发功能完成并开始修复错误。然后就是一小步就到了稳定版本。
正如我所说,还有一些工作要做,比如全局权限屏幕,我们需要进行大量抛光,但如果您想看看目前为止完成的情况,请获取SVN副本或夜间构建。记住:这还不是一个适合生产的版本!