尽管从 Joomla 1.6 时代开始,Joomla CMS 核心就增强了“会员权限”这个功能,但是直至今日的 Joomla 3.5.1,核心自带的权限管理依然非常弱。而且几乎可以肯定,Joomla 核心以后不会在“权限管理”方面做多大的改进,因为这个功能现在完全可以通过众多的第三方“会员资格/权限管理扩展”来实现。有这么多第三方扩展完全能做好的事情,Joomla 核心就不用再费神了。在这些能实现会员权限管理的扩展中,Joomla之门最推崇的就是 Emerald

或许你还没听说过 Emerad 这个扩展的名称,但是,很可能在你知道 Joomla 这个名字之前,它就已经诞生了。Emerald 的前身是 Joomla 1.5 时代的 Mighty Membership,诞生于 2008年,由吉尔吉斯斯坦国家的一位名叫 Sergey Romanov 的程序员开发。而他们的团队 Mighty Technologies 则诞生于2002年,那时候 Joomla 还未诞生,但是他们已经在为 Joomal 的前身 Mambo 在开发扩展了。—— 我扯这么多陈年旧事,不是为了炫耀我多么了解 Emerald 的发展史,而是想告诉你:Emerald 这个软件已有近10年的发展历程,其开发团队也一直专注于 Mambo/Joomla 的扩展开发,因此,他们实例雄厚,软件质量可靠。这也是我选择 Emerald 的重要原因之一。

Emerald-logo.jpg

Emerald 当然不只是“倚老卖老”,相反,真正打动我的,正是 Emerald 强大而又灵活的用户权限管理功能。

我们先来看一看 JED(Joomla 官方扩展库)对 Emerald 的功能描述:Emerald 可以对(Joomla 网站的)任意组件、任意视图、任意操作进行限制,同时无需额外的整合插件(即插即用)。

 

Emerald 限制用户权限的原理

任何一个对计算机略有了解的人都知道,“算法”(algorithm)很重要。Emerad 的作者使用的是“通用算法”,可以针对任何一个 Joomla 组件生效,甚至是还未诞生的组件。是不是有点奇妙了?

实际上这里面的奥妙一句话就能点透:由于 Joomla CMS 使用固定的动态网址模式来展示网页(show),或者执行操作(action),那么“网址参数”就是这些页面或者动作的命门。

举例来说:

例子一:

比如 Joomla 核心自带的用户管理系统,它控制着网站前台的登录和注册动作。如果你打开注册表单,会发现注册页面的网址是这样的:

 

/index.php?option=com_users&view=registration

 

这里我没有写域名,因为与域名无关。任何一个 Joomla 搭建的网站,都能通过给域名后面加上这个网址来打开其用户注册表单页面(除非该网站已关闭注册功能,或者使用了其它注册系统)。

从这里我们能证明一点:Joomla CMS 生成前台网页的时候,其网址(URL)是有一定规律的:

  1. 网址一定是以 index.php? 开头
  2. 用 option= 这个参数来指定组件
  3. 用 view= 这个参数来指定视图(页面)

套用以上规则,我们就知道,上述网址是要打开“com_uses”这个组件的“registration”视图。

很好,Emerald 就是利用“探测网址参数”来控制“允许用户做什么、不允许用户做什么”。如果我们在 Emerald 的规则里面指定,如果碰到 option 的值为”com_users“(限定了组件),当 view 的值为”registration“(限定了页面)时,就拒绝访问。那么,这条规则的实际意义就是:任何人不能注册了(打不开注册页面)。

例子二:

我们再来分析一下另一个网址:

/index.php?option=com_kunena&view=topic&catid=60&id=62413&Itemid=154#71964


在这个网址里面,我们看到新的网址参数出现了,那就是“catid”和“id”,还有一个“Itemid”。它们分别代表:
 

  1. catid: 论坛版块(类别)的 ID,因为“类别”这个词的英文词是 category;
  2. id:目标的 ID 数字(具体看目标是什么,本例中目标是话题,那就代表话题 ID);
  3. Itemid:当前菜单项目的 ID


套用以上规则,我们知道这个网址是要打开“com_kunena”(论坛组件)这个论坛的“topic”(话题)页面,哪个话题呢?是 id 为 62413 的话题。当前菜单项目的 ID 为 154。末尾“#71964”代表什么?那是锚链,代表话题页面上具体某个帖子的楼层。

Emerald 怎么来限制论坛“读帖”权限呢?只要在网址参数中指定:如果 option 的值等于“com_kunena”(限定了组件),同时 catid 等于某个数字(限定了版块),当 view 的值为“topic”时,就拒绝访问。这个规则的实际意义就是:当前用户无权阅读指定版块中的话题内容。

例子三:

接下来我们再看“回帖”的按钮指向的网址:

/index.php?option=com_kunena&view=topic&layout=reply&catid=60&id=62413&mesid=71964&Itemid=154

在这个网址中,又看到了新的网址参数:

  1. layout:代表“布局”
  2. mesid:代表帖子的 ID

套用前面说过的原理,我们知道,这个网址想要打开“reply”(回帖)这个布局,而且它回复的不是整个话题,而是直接回复 id 为 71964 的帖子。

Emerald 怎么来限制回帖权限呢?只要在网址参数中指定:如果 option 的值等于“com_kunena”(限定了组件),同时 catid 等于某个数字(限定了版块),当 layout 的值等于“reply”时,就拒绝访问。这个规则的实际意义就是:当前用户无权在指定版块中回帖。

例子四:

我们看一个下载系统的网址:

/index.php?option=com_jdownloads&view=category&catid=2&Itemid=331

这里面的网址参数我们基本上都认识。我们来解读一下:组件名称是 jdownloads(Joomla 的下载管理组件),动作是显示(view)一个类别(category),该类别的 ID 是 2 。打开这个网址会看到什么?当然会看到该类别下所有的下载列表(如果有下载的话)。

Emerald 的限制规则可以这么定:如果 option 的值是 jdownloads,view 的值是 category,当 id 的值为 2 时,就拒绝访问。这个规则的实际意义是:禁止访客看到 ID 为 2 的类别中的文件列表。

例子五:

再来看看下载按钮的网址:

/index.php?option=com_jdownloads&task=download.send&id=1&catid=2&m=0&Itemid=331

在这个网址里面出现了一个新的网址参数“task”(任务),它的值是 download.send ,我们很容易就猜到:这个网址向服务器提交了“下载”指令。一旦执行,其结果就是开始下载 ID 为 2 的类别中、文件 ID 为 1 的那个文件。

如何用 Emerald 来限制用户下载权限呢?我们这样设置规则:如果 option 的值是 jdownloads,catid 的值是 2,id 值是 1 (限定到了具体文件),当 task 的值为“download.send” 时,就拒绝访问。这样,用户就无法下载那个具体文件了。

我们把这个规则稍微改一下:不限定 id 为 1,只限定 catid 为 2,其它不变。这就变成了:凡是类别为 2 的那个类别里面的文件,用户都无权下载。

 

经过上述5个例子,你是否对 Emerald 的“算法”有所理解?由于 Joomla CMS 对组件的网址参数永恒不变是 option,所以很容易就限定组件(站长肯定知道自己所安装的组件的名称)。然后,每个组件所输出的 view 及 layout 等等都是有限的几个,并且很容易就能直接从网址中看到,这也不难获得吧?至于各种类别的 ID、菜单的 ID、版块的 ID 等等,这些在后台的“类别管理”、“版块管理”、“菜单管理”中都能看到。你甚至可以直接限制对某个具体话题的回帖权限(比如“公告”不允许任何人回帖)、对具体单个文件的下载等等。

你还需要更“鲜活”的例子?好吧,请你直接点击本文末尾的下载链接,看看你能否下载到我们网站的 Emerald 中文版安装包?Joomla之门网站已经完成了 Emerald 权限控制系统的部署。如果你没有购买相应的会员资格,你肯定是无法下载到这个文件的,同时你还会被带到“收费标准”页面上。看到 Emerald 团购方案下面的“立即购买”按钮了么?点击一下,你就能买到 Emerald 安装到你自己网站了。

OK,新的问题来了:

网址开启 SEF,静态网址里面没有网址参数怎么办?

如果我的网址开启了 SEF,网址变成了:

/video/joomla-basics/how-to-install-localhost-testing-server-with-xampp.html

这样的网址,如何知道其 view 还有 catid 还有 layout 还有 action 等等的值?

这个很难吗?也不难。因为 SEF 实际上是“伪静态”,Joomla CMS 真正输出的网址还是动态网址(Dynamic URL),只是在呈现给浏览器之前,经过了 SEF 组件的再次“重写”(rewrite),将它变成了貌似静态页面的样子。当你点击某个按钮或链接,向服务器端提交网址时,虽然看起来提交的是静态网址,实际上这个静态网址在服务器端首先由 SEF 组件“反重写”成为动态网址,再交给 Joomla CMS 核心来处理。换句话说:每一个优雅的伪静态友好网址背后,都有一个对应的动态 URL,也就有对应的这些 option 及 view 及 catid 及 layout 等等网址参数。

那么对于已经开启 SEF 的网站,如何设置 Emerald 的规则?

最简单的做法就是:临时关闭网站的 SEF,让前台所有网址输出为原始的动态网址,然后快速设置好限制规则(熟练的站长几分钟就弄好了),然后再重新开启 SEF。

如果网站访客较多,几乎每分每秒都有访客,担心关闭 SEF 影响用户体验,那么笨一点的办法就是:在网站后台的 SEF 管理组件中,都能找到一个“网址管理”页面,在那里,你可以使用从前台复制的 SEF 伪静态网址逆推(搜索)出对应的原始网址。

另一个不太笨的办法是:安装一个插件(收费的),该插件在网站前台页面底部可以显示当前网址的原始动态网址,并且该消息只显示给管理员看。

哦,似乎漏掉了一个问题:

“用户”又是怎么限定的?

Emerald 当然首先要求你创建“用户群组”(人以群分嘛),也就是会员资格的名称。当用户付费购买了对应的资格(由若干限制规则所组成)之后,就拥有了这个会员资格,从而在访问对应网址时,被判断为“拥有权限”,然后顺利访问到资源。

我们知道 Joomla 核心已经有了一个“用户群组“功能,你也可以把这个”用户群组“跟 Emerald 的”会员资格“联系起来。因为 Emerald 提供了一种”操作“,就是当用户购买某种会员资格之后,就自动把他划分到 Joomla 核心所管理的某个指定的”用户群组“里面去。

为什么说 Emerald 是“全世界最强大的 Joomla 会员资格管理扩展”?

通过以上介绍,我们可以看出,Emerald 完全是靠对网址参数的控制来实现对用户权限的管理。由于 Joomla 的每一个页面都有固定的网址模式,也都有固定的网址参数,每一个对象(类别、文章、文件、帖子、视频)都有固定的 ID,所以任何一个对象都逃不出 Emerald 的”掌心“。

即使对于还未诞生的 Joomla 组件,我们也很清楚,软件作者也必将遵守 Joomla CMS 的规则,让他的组件通过各种 view、task、layout、action 这些网址参数结合对应的 ID 来呈现页面、实现功能。那么,我们就非常确信:一旦这个组件诞生,安装到 Joomla 网站上,我们就能在 Emerald 里面设置相应的规则来控制用户对该组件的各种访问权限。

看到了吗?我们根本不需要单独针对某个组件来开发一个新的“权限插件”!如果那样的话,全世界有多少组件?每天有多少新组件产生?每次都开发“整合插件”,岂不是要累死人?

但是遗憾的是,很多声称“这才是最强大的 Joomla 会员权限管理组件”的扩展,都是工作在“整合插件”的模式下。你看看他们官方的介绍,往往都是“目前总共支持超过 20 款主流热门组件”、“今天又发布了针对 XXX 组件的整合插件”,等等。但是回头看看 Emerald ,只能笑而不语:我们连未诞生的组件都支持了,更何况已经存在的组件?

 

Emerald 引导用户付费的流程

 当一个陌生的访客来到你的 Joomla 网站,如果他想去访问某个收费的资源,例如文章,或者下载,或者观看视频,或者论坛的某个版块,那么他需要点击菜单/链接,这时候就有网址被提交给服务器。接下来,服务器端的 Emerald “监控”插件首先被触发,由 Emerald 进行以下判断及操作:

用户是否已登录?未登录的话,向他显示登录表单;已登录的话,检查是否拥有相应权限;没有权限,引导用户前往“价目表”页面,告诉他必须购买某个会员资格才能获得访问权限;判断出会员已拥有权限,那么直接引导他转向目标对象。如果用户在价目表页面上点击“购买”按钮并完成支付(我是否忘了告诉你 Emerald 已经自带了支付接口?),Emerald 就将该用户分配到相应的会员资格群组,同时赋予他相应的权限,然后用户就能访问到那个对象;如果用户没有点击“购买”按钮,他就只能陷入“死循环”,永远看不到想看的页面;如果用户点击了“购买”按钮,但是没有完成付款(中途取消交易),那么他还是会回到“死循环”,无法获得访问权限。

这整个流程都是在瞬间完成的。所以用户不会碰到“等了好半天才告诉我:你没有权限”。

Emerald 官方制作了一个流程图,大家参考一下:

emerald-how-it-works.jpg

 我的 Joomla 网站需要安装 Emerald 吗?

如果你的 Joomla 网站不需要权限控制,比如任何人都能阅读任何文章,任何人都能下载任何文件,任何人都能在论坛发帖,任何人都能观看视频教程,等等,那么,你不需要 Emerald。

或者,你的 Joomla 网站只需要简单的权限控制,仅仅区分“游客”与“注册会员”,例如:游客不能下载,但是登录后就可以;游客不能发帖,但是登录后就可以;…… 这种权限控制,用 Joomla CMS 核心自带的权限控制系统就足够了。你也不需要 Emerald。

但是,如果你需要更详细的权限划分,例如“教师”可以写文章,“学生”也可以写文章,但是“教师”可以看到“学生”的文章,而“学生”不能看到“教师”的文章;或者比如,“普通会员”只能在“免费版块”发帖,“付费会员”则可以在“高级交流”版块发帖,但是只有“白金会员”才可以阅读“高人高见”版块的帖子 —— 同时,你希望开通“支付宝”或者 PayPal 收款功能,即使你在睡梦中,别人也可能半夜访问了你网站,发现有价值的资源,然后主动付款并获得权限。然后第二天你醒来看到又一笔收入到账了!

怎么样?这样的“睡着觉也能自动赚钱”的方法,你需要吗?这么强大的权限管理系统,你需要吗?如果需要,那就尽快安装 Emerald 吧。

 

 Emerald 组件的安装方法:

 目前 Joomla之门 已经完成 Emerald 9 最新版本的汉化工作(包括支付宝插件),同时作为 Emerald 官方授权的“开发者”合作伙伴,我们有权在 Joomla之门 的任何客户的网站上安装部署 Emerald 组件及其配套插件。虽然我们为你安装也很快,我还是打算简单介绍一下安装注意事项,或许有些站长很愿意自己体会安装过程。

从 Joomla之门 下载到的是一个名为 pkg_emerald-v.9.xxx-j3-Chinese.zip 的文件,大小约 750KB 。文件名里面的数字及 xxx 代表版本号,一旦版本升级,这个数字就会变。下载到之后,不要解压,这个文件就是标准的 Joomla “集成包”(package)类型的安装包。

上传、安装的操作跟其它扩展一样,通过 Joomla 后台的“扩展 -> 扩展管理 -> 安装”界面来进行。安装结束之后,不要着急进入 Emerald 后台,而是先要为它创建菜单。

进入 Joomla 后台的“菜单管理”,总共需要创建3个新菜单项目:

  1. 会员资格历史:显示在“用户菜单”上,供当前登录的会员查询自己的购买历史(比如看看我买了什么会员资格,还剩多少天);
  2. 控制面板:显示在“用户菜单”上,但是只允许管理员访问,站长在这里管理所有的权限设置;
  3. 方案列表(价目表):公开显示,方便访客了解网站上都有哪些会员资格套餐,各是多少钱。同时每个方案下方都有“购买”按钮。

当你点击“新建”按钮时,Emerald 菜单类型的选项是这样的:

 

b_600_0_16777215_00_images_stories_article_tutorial_2016tutorial_Emerald-menu-item-types-joomla.png

 

请记住:你必须创建上述3个菜单项目,一个都不能少。同时必须注意每个菜单项目应该发布到哪个菜单上,应该指派什么样的访问权限。

弄完了菜单,我们还必须到 Emerald 组件后台做一些设置。点击 Joomla 后台顶部菜单“组件 -> Emerald -> 设置”,可以看到 Emerald 设置页面是这样的(局部截图):

 Emerald-configuration-set-menu-link.png

我专门用红线标注了两个参数,这两个必须设置。由于我们前面已经创建好了3个菜单项目,那么在这里,将其中两个按照选项要求选好,就可以了。

设置完成之后,保存参数。至此,Emerald 的安装过程才算完全结束。

接下来,就是创建各种会员资格,给会员资格设置权限限制规则,标注价格,指定支付方式(默认支持“离线支付”,PayPal 、支付宝等支付插件需要额外购买。不过,Joomla之门都可以在团购中包含),等等。

这里要特别提醒一点:Emerald 的所有会员资格设置、价格设置、支付方式设置等等操作,都是在网站前台进行的!所以,当你看到其后台界面只有那么简单,找不到其它设置项目的时候,不要困惑。直接到网站前台以管理员身份登录,然后点击你前面创建的“Emerald 控制面板”菜单项目,就能看到这些按钮了。

等你设置好上述这些规则并发布之后,访客再去点击那些链接,就会发现权限管理系统生效了!

Emerald 就这点功能吗?

Emerald 的功能当然不止这一些。限于篇幅,我们本文只是简单介绍一下。至于更多的强大功能,以及后面 Emerald 10 即将带来的新功能,我们有机会再介绍。如果你对 Emerald 有兴趣,可以安装到网站上细细体会,同时享受 Emerald 给你带来的方便。

 

  1. 评论 (2)

  2. Add Yours

评论 (2)

这里还没有人发表评论
  1. 顾泽民

这个东西的控制面板、资格还有列表有没有模板可以用,页面设计的不是很好看

  附件
您无权查看附件
 
  1. Joomla之门    顾泽民

大概作者优势是写代码,对美工不是很擅长。软件界面算得上中规中矩吧,不算难看。我觉得能接受。基本上大部分界面都是管理员在看。
Emerald 本身没有模板系统,不过它的代码遵守 MVC 结构。如果要改变外观,可以考虑采用“HTML 僭越输出”方式,或者自行修改 CSS 来实现。

  附件
您无权查看附件
 

免费下载最新Joomla!核心中文版

扫描此二维码,立即开始下载 Joomla 3 核心中文版

付费下载汉化版扩展

付费后即可下载独家海量

Joomla! CMS 扩展汉化版

了解付费会员制度

点击这里给我发消息

了解 joomlagate.com 网站的付费会员制度