model = new \app\agent\model\auth\Role(); } /** * 获取角色列表 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 13:49 * * @return \think\response\Json * @throws \think\exception\DbException */ public function index() { $where = []; !empty($this->auth->user()['user_id']) && $where[] = ['user_id', '=', $this->auth->user()['user_id']]; //组合搜索 !empty(input('name')) && $where[] = ['name', 'like', '%' . input('name') . '%']; (!empty(input('status')) || input('status') == '0' ) && $where[] = ['status', 'eq', input('status')]; return IResponse::paginate($this->model->where($where) ->paginate(input('limit'),false)); } /** * 获取角色权限 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 13:49 * * @param $id * @return \think\response\Json */ public function permission($id) { // 获取角色信息 $role = $this->model->getBy($id); if ($role){ $Permission = new \app\agent\model\auth\Permission(); $PermissionRole = new PermissionRole(); // 全部权限 $permissions = $Permission->getAll(); // 用户操作权限ID $permission_access = $this->enforcer::GetPermissionsForUser($role->name); // 用户菜单权限ID $permissions_role = $PermissionRole->getBy(['role_id' => $role->id]); // 合并权限 $permissions_idx = []; if (!empty($permission_access)){ foreach ($permission_access as $item){ $permissions_idx[] = $Permission ->where(['url' => $item[1],'policy' => $item[2]])->value('id'); } } if (!empty($permissions_role['permission_idx'])) { foreach (str2arr($permissions_role['permission_idx']) as $permId){ $permissions_idx[] = $Permission ->where(['id' => $permId])->value('id'); } } foreach ($permissions as $k => $v){ if (in_array($v['id'], array_unique($permissions_idx))){ $v['checked'] = true; }else{ $v['checked'] = false; } } return IResponse::success($permissions); } return IResponse::failure('角色不存在'); } /** * 角色授权 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/21 20:11 * * @param int $id 角色ID * @return mixed */ public function authority($id) { // 获取角色信息 $role = $this->model->getBy($id); if ($role){ $Permission = new \app\agent\model\auth\Permission(); $PermissionRole = new PermissionRole(); // 原先存在的权限 $user_permissions = $this->enforcer::GetPermissionsForUser($role->name); // 接收变更的数据数据 $authIds = $this->request->param('authIds'); $permissions = []; //操作权限 $perm_roles_idx = ""; // 菜单权限id foreach (str2arr($authIds) as $permId){ $permission = $Permission->getBy($permId); if ($permission->type == 1){ $permissions[] = $permission->id; if (!$this->enforcer::HasPermissionForUser($role->name,$permission->url,$permission->policy)){ // 不存则新增 $this->enforcer::AddPermissionForUser($role->name, $permission->url,$permission->policy); } }else { $perm_roles_idx .= ',' . $permission->id; } } // 更新角色权限 foreach ($user_permissions as $item){ $user_permission = $Permission->getBy([ 'url' => $item[1], 'policy' => $item[2] ]); if (isset($user_permission['id']) && !in_array($user_permission->id, $permissions)){ // 要删掉的旧授权 $this->enforcer::DeletePermissionForUser($role->name, $item[1], $item[2]); } } // 查再更新 菜单权限更新 $pro = $PermissionRole->getBy(['role_id' => $role->id]); if ($pro){ $PermissionRole->allowField(true)->save([ 'permission_idx' => ltrim($perm_roles_idx,',') ],['role_id' => $role->id]); }else { $PermissionRole::create([ 'permission_idx' => ltrim($perm_roles_idx,','), 'role_id' => $role->id], true ); } return IResponse::success([],'角色授权成功'); } return IResponse::failure('角色不存在'); } /** * 新增角色 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:24 * */ public function save() { // 接收数据 $params = $this->request->param(); // 数据校验 $valid = $this->validate($params,[ 'name|角色名称' => 'require|unique:\\app\\agent\\model\\auth\\Role', 'description|角色描述' => 'require' ],[ 'name.unique' => '角色名称已存在!' ]); (true !== $valid) && IResponse::failure($valid); // 保存数据 $params['user_id'] = $this->auth->user()['user_id']; $res = $this->model->storeBy($params); return $res ? IResponse::success([],'新增角色成功'): IResponse::failure('新增角色异常'); } /** * 更新数据 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:24 * * @param $id * @return \think\response\Json */ public function update($id) { // 接收数据 $params = $this->request->param(); // 数据校验 $valid = $this->validate($params,[ 'name|角色名称' => 'require|alpha', 'description|角色描述' => 'require' ],[ 'name.alpha' => '角色名称仅支持英文!' ]); // 校验失败 (true !== $valid) && IResponse::failure($valid); // 查改 $role = $this->model->findBy($id); $role->updateBy($id, $params); return IResponse::success('更新角色信息成功'); } /** * 删除角色 * * @author 许祖兴 < zuxing.xu@lettered.cn> * @date 2020/3/16 14:22 * * @param $id * @return \think\response\Json */ public function delete($id) { $this->model->deleteBy($id); return IResponse::success([],'删除角色成功'); } }