示例#1
0
 /**
  * Specifies the access control rules.
  * This method is used by the 'accessControl' filter.
  * @return array access control rules
  */
 public function accessRules()
 {
     $arr = explode('/', $_SERVER['REDIRECT_URL']);
     $system = $arr[1];
     $controller = Yii::app()->controller->id;
     $action = Yii::app()->controller->action->id;
     $list_ignore = $this->controllerIgnore();
     $controller_ignore = $list_ignore[$system];
     if (array_key_exists($controller, $controller_ignore)) {
         $actions = $controller_ignore[$controller];
         if (in_array($action, $actions)) {
             return array();
         }
     }
     //admin system khong thuoc he thong phan quyen
     if ($this->user['admin_system'] == 1) {
         return array();
     }
     if (!empty($this->user['access_url']) && !isset($_GET['test'])) {
         $access_url = trim($this->user['access_url'], '/');
         $request_url = trim($_SERVER['REQUEST_URI'], '/');
         if (strpos($request_url, $access_url) !== 0) {
             die('Access define!');
         }
     }
     //lay danh sach quyen
     $query = "SELECT rule_id FROM {{user_rule}} WHERE uid = " . $this->user['id'];
     $listRule = $this->db->createCommand($query)->queryColumn();
     if (empty($listRule)) {
         die('tài khoản của bạn không được phép truy cập vào hệ thống quản trị');
     }
     //lay danh sach controller co quyen vao
     $query = "SELECT controller, actions FROM {{permission}} WHERE system = '" . addslashes($system) . "' AND rule_id IN (" . implode(',', $listRule) . ")";
     $listController = $this->db->createCommand($query)->queryAll();
     $list = array();
     foreach ($listController as $item) {
         $tmp = unserialize($item['actions']);
         if (isset($list[$item['controller']])) {
             $list[$item['controller']] = array_merge($list[$item['controller']], $tmp);
         } else {
             $list[$item['controller']] = $tmp;
         }
     }
     self::$permission = $list;
     if (isset($list[$controller]) && in_array($action, $list[$controller])) {
         return array(array('allow', 'actions' => array(), 'users' => array(Yii::app()->user->guestName)), array('allow', 'users' => array('@')), array('deny', 'users' => array('*')));
     } else {
         echo '<meta charset="utf-8" />';
         die('Bạn không có quyền truy cập chức năng này!');
     }
 }