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相關參數。

...