权限问题,能不能在acl表里的acl_name字段里输入多个值?

#1 小双

比如:
ta.gif
用php的explode(',',$acl_name)的方法来实现“一个权限数据,多个角色共用”?

2010-03-15 14:26:14

#2 jake

从几个方面来说:

1. explode(',',$acl_name)形式效率不高,这是很显然的,毕竟要把全部记录查出再进行循环判断。作为折衷的方式,可以建议使用acl_name1,acl_name2,acl_name3也就是大致上规定一个控制器/动作数据有三个权限,然后就增加三个字段来做。当然这不是很灵活,不过实践操作中已经足够了。

2. spAcl类中,有对权限判断的方法,如果你要将这个方法改造成自己的方法,比如说原来acl只能判断一个控制器/方法一个角色的,改成可以判断控制器/方法是否还有其他角色,这需要改变到acl的权限判断钩子,和无权限提示钩子(扩展acl的prompt)一样,权限判断钩子是(扩展acl的checker),看spAcl的代码,可以看到checker是默认使用spAclModel的check方法的,所以这个要在index.php设置里面重新设置成你自己的权限判断方法。

3. 这里给个建议,虽然将多个角色的数据变成统一,也是可以做到的。不过在实际操作中,这是没必要的。毕竟一一对应的数据会给数据表操作(增删改)带来更大的方便。把他们做到统一,只是视觉上数据整齐些。

2010-03-15 14:52:07