Joomla 1.6的权限控制分析

近段时间在看joomla1.6的权限控制,总想去网上找一些说明,但大部分都在说joomla1.6对此做了很大的改进,以及一些权限的操作,而真正面对PHP开发的说明却没有找到,没办法只能自己研究一下了,可能不是太难,不过顺着joomla的代码捋真是一件让人头疼的事。
joomla1.6是权限到组的,而没有做到权限到每个用户。首先用#__usergroups来保存组的信息,这里的lft,rgt估计是做权限覆盖用的,没细研究,不敢乱发言。如果当前用户的lft和rgt分别的3和7,那么我们就可以用lft<3 and rgt>7来取出当前用户的所有父结点(可能名称不是很准确)。
接下来我们来看#__assets表,这个表存储了真正的权限,components和contents以及一些需要权限控制的模块和数据库的每条记录都可以在这里进行权限控制,这个表的lft和rgt也和#__usergroups表类似,rules字段存储的是访问控制的信息,它是一个json字符串,我们可以把它变成数组,这样可以更直观一些。下面我们用com_content来举例,就能一目了然了。
我们首先把#__assets里面`name`='com_content'的rules拿出来,用json_decode解析一下,数组如下:

  1. stdClass Object
  2. (
  3.     [core.admin] => stdClass Object
  4.         (
  5.             [7] => 1
  6.         )
  7.  
  8.     [core.manage] => stdClass Object
  9.         (
  10.             [6] => 1
  11.         )
  12.  
  13.     [core.create] => stdClass Object
  14.         (
  15.             [10] => 0
  16.             [3] => 1
  17.             [5] => 1
  18.         )
  19.  
  20.     [core.delete] => Array
  21.         (
  22.         )
  23.  
  24.     [core.edit] => stdClass Object
  25.         (
  26.             [4] => 1
  27.         )
  28.  
  29.     [core.edit.state] => stdClass Object
  30.         (
  31.             [5] => 1
  32.         )
  33.  
  34. )


上边对象里每个二级对象的属性是组的id值。
我们再点开Article Manager的Options->Permissions看看:

attachments

对比一下,发现结果了么?呵呵^_^
当然我们还可以把某篇文章的权限改一下,再打印出这些信息看看,也是类似的。

个人觉得这样有一个缺点,就是对于#__usergroups表,每更改一次用户,都要把所有的记录都修改一遍,因为要重新分配lft和rgt。#__assets应该也是这样的,所以如果数据量特别大的话,要更改某一条记录,就不免有些浪费数据库,有些牵一发而动全身的感觉,有些影响效率哦~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值