尽管从 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 给你带来的方便。

 

总评分 (0)

0 (满分5分)

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

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

付费下载汉化版扩展

付费后即可下载独家海量

Joomla! CMS 扩展汉化版

了解付费会员制度

点击这里给我发消息

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