菜单表:
菜单与角色关系表:
登入后台构造函数将关系表 菜单id 转化为数组 赋值全局
/** * 在执行所有动作之前,先执行这个方法 * @param \yii\base\Action $action * @return bool true-继续执行/false-终止执行 */ public function beforeAction($action) { /* 后台栏目 */ $this->menu = $this->getMenus(); // var_dump($this->menu);exit; /* 获取当前访问的 controller/action */ $controller = $this->id; $action = $this->action->id; $rule = strtolower($controller.'/'.$action); // var_dump($rule);exit; //将所属角色权限取出与当前url规则对比 if (!$this->checkRule($rule)){ echo 'Access Denied'; return false; } return true; } /** * --------------------------------------- * 权限检测 * @param string $rule 检测的规则 * @return boolean * --------------------------------------- */ final protected function checkRule($rule) { if (!in_array($rule, $this->menu)) { return false; } return true; } /** * --------------------------------------- * 获取控制器菜单数组,二级菜单元素位于一级菜单的'_child'元素中 * @return array $menus * --------------------------------------- */ final public function getMenus() { $menu = []; $rows = AdminMenu::getAdminMenu(); foreach ($rows as $key => $val) { if (in_array($val['id'], $this->menuid)) { if (!in_array($val['url'], $menu)) $menu[] = $val['url']; } } return $menu; }
原创文章,转载请标明出处!