在默认的情况下,lurd_control类默认只能把权限控制到数据库本身,不能对数据读写之类的权限进行限制,如果在必要的情况下,可以进行下面方式的处理:
1、对于不用细分的权限,还是直接由单个控制器事件,通过even变量进行控制;
2、对于需要细分,例如说,允许用户增加修改,但不允许删除,可以在当前控制器类中新建一个方法,如:
function del_data()
在这个方法里再初始化lurd控制器类,但是在这方法中控制只允许执行even='delete',同样的,默认的方法刚不允许执行even=delete 从而达到这个目的,如果控制器里只操作一个数据模型的,考虑代码重复性,可以把初始化放到构造函数。
例如,默认的短信管理:
- class ctl_phone_sms
- {
-
-
-
- public function sms_log()
- {
- $tb = cls_lurd_control::factory('sms_log');
- $tb->list_config['searchfield'] = "send_phone";
- $tb->list_config['orderquery'] = " order by `id` desc ";
- $tb->form_url = '?ct=phone_sms&ac=sms_log';
- $tb->set_tplfiles('phone_sms.log.tpl', '', 'phone_sms.log.edit.tpl');
- $tb->listen(cls_request::$forms);
- exit();
- }
- }
在上面例子中,管理是不严格的,权限控制只能绑定到 ct=phone_sms ac=sms_log ,但到了这里后,就可以完全执行Insert、Update、Delete、List操作,在某些情况下,显然不是合理的,例如说,我要把用户delete分离,目前适合的做法是:先在sms_log中禁止delete事件,然后开一个单独的action处理delete事件,lurd_control类的事件参数(even)分别为:add, saveadd, edit, saveedit, delete, list,可按情况控制,按这个思路,上面改为:
- class ctl_phone_sms
- {
-
-
-
- public function sms_log()
- {
- $cur_even = request('even', 'list');
- if($cur_even == 'delete') exit(0);
- $tb = cls_lurd_control::factory('sms_log');
- $tb->list_config['searchfield'] = "send_phone";
- $tb->list_config['orderquery'] = " order by `id` desc ";
- $tb->form_url = '?ct=phone_sms&ac=sms_log';
- $tb->set_tplfiles('phone_sms.log.tpl', '', 'phone_sms.log.edit.tpl');
- $tb->listen(cls_request::$forms);
- exit();
- }
-
-
-
-
- public function delete()
- {
- $cur_even = request('even', 'list');
- if($cur_even != 'delete') exit(0);
- $tb = cls_lurd_control::factory('sms_log');
- $tb->form_url = '?ct=phone_sms&ac=sms_log';
- $tb->set_tplfiles('', '', '');
- $tb->listen(cls_request::$forms);
- exit();
- }
- }
同样的,其它事件也是类似操作,不过记得要修改模板里的query或form相关参数。
|