| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | <?php/** * FecShop file. * * @link http://www.fecshop.com/ * @copyright Copyright (c) 2016 FecShop Software LLC * @license http://www.fecshop.com/license/ */namespace fecadmin;use Yii;use yii\helpers\Url;use fec\helpers\CUrl;use fec\helpers\CConfig;use fec\helpers\CCache;use fecadmin\models\AdminRole;use fecadmin\models\AdminUserRole;use fecadmin\models\AdminLog;use yii\base\InvalidValueException;/** * @author Terry Zhao <2358269014@qq.com> * @since 1.0 */use fec\controllers\FecController;/** * fec admin 模块的controller配置 */class FecadminbaseController extends FecController{    public $enableCsrfValidation = false;        public function getViewPath()    {		return Yii::getAlias('@fecadmin/views') . DIRECTORY_SEPARATOR . $this->id;    }	# 进行是否登录的验证	public function __construct($id, $module, $config = []){				$isGuest = Yii::$app->user->isGuest;		//echo $isGuest;exit;		//\fec\helpers\CSession::set('a',1);		//echo \fec\helpers\CSession::get('a');				if($isGuest){			//$this->redirect("/fecadmin/login/index",200);			CUrl::redirect("/fecadmin/login/index"); # 立即跳转		}				//echo ;		//echo 1;		//echo Yii::$app->controller->id;		//exit;  		parent::__construct($id, $module, $config);	}		# 如果登录成功,则进行账户权限的验证。	public function beforeAction($action)	{		# 当前的role key		$controller_role_key = $this->getCurrentControllerRoleKey();				# 配置中的各个不同的role_id 对应的role key		$roles_keys = $this->getCurrentRoleKeys();		# 如果当前的role_key 存在于 当前的权限role_keys数组中,则,可以使用role 		$roles_keys = is_array($roles_keys) ? $roles_keys : [];		if($controller_role_key){			if(!in_array($controller_role_key,$roles_keys)){				# 如果不存在,则说明没有权限,禁止访问,exit				echo  '<span style="    padding: 12px;color: #cc0000;display: block;font-size: 40px;margin: 30px 50px;">						You donot have role to visit this controller					</span>';								exit;			}		}		parent::beforeAction($action);		\fecadmin\helpers\CSystemlog::saveSystemLog();		return true;	}	# 得到当前controller Role key	public function getCurrentControllerRoleKey(){		# 进行权限验证 如果不满足权限,则停止执行。		$url_key 	= CUrl::getUrlKey();		$url_key	= trim($url_key,"/");		$controller_role_key = '';		if($url_key){			$url_key_arr = explode("/",$url_key);			$action 	= $this->action->id;			if($url_key_arr[count($url_key_arr)-1] == $action){				unset($url_key_arr[count($url_key_arr)-1]);			}			$controller_role_key = "/".implode("/",$url_key_arr);		}		return $controller_role_key;	}			# 得当当前用户role 对应的菜单role_key数组	public function getCurrentRoleKeys(){		$identity = Yii::$app->user->identity;		$user_id = $identity->id ;				$roles = AdminUserRole::find()->asArray()->where([			'user_id' => $user_id,		])->all();				$AdminRole = new AdminRole;		# 缓存读取role key		if(!(CCache::get(CCache::ALL_ROLE_KEY_CACHE_HANDLE))){			if(!CCache::set(CCache::ALL_ROLE_KEY_CACHE_HANDLE,$AdminRole->getAllRoleMenuRoleKey())){				throw new InvalidValueException('save role key to cache error,check your cache if it can write!');			}					}		$roleKeys = CCache::get(CCache::ALL_ROLE_KEY_CACHE_HANDLE);				//var_dump($roleKeys);exit;		//$role_ids = [];		$menu_roles = [];		if(!empty($roles)){			foreach($roles as $role){				$role_id = $role['role_id'];				$menu_role = isset($roleKeys[$role_id]) ? $roleKeys[$role_id] : [];				$menu_roles = array_merge($menu_roles,$menu_role);			}		}		return $menu_roles;	}			# 保存系统日志。	public function saveSystemLog(){		$logConfig = CConfig::param("systemlog");		//var_dump($logConfig);		if(!is_array($logConfig) || !isset($logConfig['enable']) ||  !$logConfig['enable']){			return;		}				$systemLog = new AdminLog();		$user = Yii::$app->user->identity;		if($user){			$username 	= $user['username'];			$person 	= $user['person'];			$currentData= date('Y-m-d H:i:s');			$url = CUrl::getCurrentUrl();			$systemLog->account = $username;			$systemLog->person = $person;			$systemLog->created_at = $currentData;			$systemLog->url = $url;			$systemLog->save();		}		}}
 |