94hwan-PHP框架基本原理

Source:94hwan 与众不同  Author:网络部
2010-07-13 17:38

在默认的情况下,lurd_control类默认只能把权限控制到数据库本身,不能对数据读写之类的权限进行限制,如果在必要的情况下,可以进行下面方式的处理:
1、对于不用细分的权限,还是直接由单个控制器事件,通过even变量进行控制;
2、对于需要细分,例如说,允许用户增加修改,但不允许删除,可以在当前控制器类中新建一个方法,如:
function del_data()
在这个方法里再初始化lurd控制器类,但是在这方法中控制只允许执行even='delete',同样的,默认的方法刚不允许执行even=delete 从而达到这个目的,如果控制器里只操作一个数据模型的,考虑代码重复性,可以把初始化放到构造函数。
例如,默认的短信管理:

  1. class ctl_phone_sms 
  2.    /** 
  3.     * 短信发送日志管理 
  4.     */ 
  5.     public function sms_log() 
  6.     { 
  7.         $tb = cls_lurd_control::factory('sms_log'); 
  8.         $tb->list_config['searchfield'] = "send_phone"
  9.         $tb->list_config['orderquery'] = " order by `id` desc "
  10.         $tb->form_url = '?ct=phone_sms&ac=sms_log'
  11.         $tb->set_tplfiles('phone_sms.log.tpl''''phone_sms.log.edit.tpl'); 
  12.         $tb->listen(cls_request::$forms); 
  13.         exit(); 
  14.     } 

在上面例子中,管理是不严格的,权限控制只能绑定到 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,可按情况控制,按这个思路,上面改为:

  1. class ctl_phone_sms  
  2. {  
  3.     /**  
  4.      * 短信发送日志管理  
  5.      */  
  6.     public function sms_log()  
  7.     {  
  8.         $cur_even = request('even''list'); 
  9.         if($cur_even == 'delete'exit(0); 
  10.         $tb = cls_lurd_control::factory('sms_log');  
  11.         $tb->list_config['searchfield'] = "send_phone";  
  12.         $tb->list_config['orderquery'] = " order by `id` desc ";  
  13.         $tb->form_url = '?ct=phone_sms&ac=sms_log';  
  14.         $tb->set_tplfiles('phone_sms.log.tpl''''phone_sms.log.edit.tpl');  
  15.         $tb->listen(cls_request::$forms);  
  16.         exit();  
  17.     } 
  18.      
  19.     /**  
  20.      * 短信删除事件 
  21.      */  
  22.     public function delete()  
  23.     { 
  24.         $cur_even = request('even', 'list'); 
  25.         if($cur_even != 'delete'exit(0); 
  26.         $tb = cls_lurd_control::factory('sms_log');  
  27.         $tb->form_url = '?ct=phone_sms&ac=sms_log';  
  28.         $tb->set_tplfiles('''''');  
  29.         $tb->listen(cls_request::$forms);  
  30.         exit();  
  31.     } 

同样的,其它事件也是类似操作,不过记得要修改模板里的query或form相关参数。

...