/** * 绑定角色与权限的对应关系 * @param $roleId 角色ID * @param $pids 权限ID列表 * @param $loginUser \liuxy\admin\models\AdminUser */ public static function bind($roleId, $pids, $loginUser) { self::deteteAll(['role_id' => $roleId]); if (!empty($pids)) { $pids = explode(',', $pids); $pids = array_unique($pids); foreach ($pids as $pid) { if (!empty($pid)) { $item = new RolePermission(); $item->isNewRecord = true; $item->role_id = $roleId; $item->permission_id = $pid; $item->insert_by = $loginUser->username; $item->insert(); if ($item->hasErrors()) { Yii::error(VarDumper::dumpAsString($item->getErrors()), __METHOD__); } unset($item); } } /** * 清理角色下所对应用户的权限 */ foreach (AdminUserRole::find()->where(['role_id' => $roleId])->all() as $userRole) { AdminUser::clearPermission($userRole['user_id']); } } }
/** * 注销 */ public function actionLogout() { AdminUser::setLogout(); if ($this->request->getIsAjax()) { $this->setResponseData('data', Url::toRoute('login')); } else { $this->redirect(Url::toRoute('login')); } }
/** * @param \yii\base\Action $action * @param mixed $result * @return mixed|void * @throws \yii\db\Exception */ public function afterAction($action, $result) { /** * 设置导航 */ if (($this->format == '' || $this->format == 'html') && !$this->request->getIsAjax()) { if ($action->id !== 'login') { $myPermission = AdminUser::getPermission($this->user->id); $this->setResponseData('topMenu', $this->getTopMenu($myPermission)); $path = $action->controller->route; if (!empty($path) && $path != \Yii::$app->defaultRoute && $path != \Yii::$app->errorHandler->errorAction) { /** * @var $perm \liuxy\admin\models\Permission */ $perm = Permission::find()->where(['link' => $path])->one(); if ($perm) { $this->setResponseData('current', $perm); /** * @var $top \liuxy\admin\models\Permission */ $top = Permission::findTop($perm); $this->setResponseData('topItem', $top); $this->setResponseData('subMenu', $this->getSubMenu($top->id, $myPermission)); } else { $this->setDefaultMenu(); } } else { $this->setDefaultMenu(); } } } return parent::afterAction($action, $result); }
<?php use liuxy\admin\Module; use yii\helpers\Url; $currentUser = \liuxy\admin\models\AdminUser::getUser(); ?> <!-- BEGIN HEADER --> <div class="page-header navbar navbar-fixed-top"> <!-- BEGIN HEADER INNER --> <div class="page-header-inner"> <!-- BEGIN LOGO --> <div class="page-logo"> <a href="index.html"> <img src="<?php echo Yii::$app->assetManager->getPublishedUrl('@liuxy/themes/admin'); ?> /img/logo.png" alt="logo" class="logo-default"/> </a> <div class="menu-toggler sidebar-toggler"> <!-- DOC: Remove the above "hide" to enable the sidebar toggler button on header --> </div> </div> <!-- END LOGO --> <div class="hor-menu hor-menu-light hidden-sm hidden-xs"> <ul class="nav navbar-nav"> <?php if ($menus) { foreach ($menus as $menu) { if ($menu['is_nav'] != \liuxy\admin\models\Permission::NAV_YES) { continue; }
/** * 获取管理员信息 */ public function actionGet() { $id = $this->get('id', 0); $user = AdminUser::findByCache($id); if ($user) { $roles = AdminUserRole::findAllArray(['user_id' => $id]); if ($roles) { $user['roles'] = $roles; } $this->setResponseData('data', $user); } else { $this->setError(Module::t('error.user.notexists')); } }
/** * 清理用户缓存 * @param $permissionId */ public static function clearUserPermission($permissionId) { $roles = []; foreach (RolePermission::find()->where(['permission_id' => $permissionId])->all() as $rolePerm) { $roles[] = $rolePerm['role_id']; } foreach (AdminUserRole::find()->where(['role_id' => $roles])->all() as $userRole) { AdminUser::clearPermission($userRole['user_id']); } }