with("admin", "permissions")->orderBy("sortnumber")->get()->toArray(); foreach ($data as &$item) { foreach ($item['permissions'] as &$permission) { $has_auth_node_tags = RoleHasPermission::where('role_id', $item['id']) ->where('permission_id', $permission['id'])->value('auth_node_tags'); $permission['has_auth_node_tags'] = []; if (!empty($has_auth_node_tags)) { $permission['has_auth_node_tags'] = explode(',', $has_auth_node_tags); } } } return $this->success($data); } /** * @OA\Get( * path="/api/admin/role/show", * tags={"后台管理"}, * summary="获取角色详情", * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="string"), required=true, description="id"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Response( * response="200", * description="获取角色" * ) * ) */ public function show() { $data = (new Role())->with("admin", "roleHasPermissions.permissions")->find(request()->id); return $this->success($data); } /** * @OA\Post( * path="/api/admin/role/save", * tags={"后台管理"}, * summary="保存角色", * description="", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="id", in="query", @OA\Schema(type="integer"), description="菜单ID,为空表示新增,不为空表示更新"), * @OA\Parameter(name="name", in="query", @OA\Schema(type="string"), required=true, description="名称"), * @OA\Parameter(name="introduce", in="query", @OA\Schema(type="string"), required=true, description="说明"), * @OA\Parameter(name="allow_level", in="query", @OA\Schema(type="string"), required=true, description="数据权限0全部1部分2自己"), * @OA\Parameter(name="sortnumber", in="query", @OA\Schema(type="integer"), description="同级排序,默认为0"), * @OA\Response( * response="200", * description="保存角色" * ) * ) */ public function save() { if (request()->id) { return $this->update(); } else { return $this->store(); } } public function store() { DB::beginTransaction(); try { $data = (new Role())->filterRequestColumns(request(), ["id"]); $data["guard_name"] = $this->guardName; $permission = Role::create($data); DB::commit(); OperateLog::addLogs($this->getUser(), "新增角色[$permission->name]成功"); return $this->success($permission); } catch (\Exception $exception) { DB::rollBack(); OperateLog::addLogs($this->getUser(), "新增角色失败", $exception->getMessage()); return $this->fail([$exception->getCode(), $exception->getMessage()]); } } public function update() { DB::beginTransaction(); try { $model = Role::find(request()->id); $data = $model->filterRequestColumns(request(), ["id"]); $model->update($data); DB::commit(); OperateLog::addLogs($this->getUser(), "更新角色[$model->name]成功"); return $this->success($model); } catch (\Exception $exception) { DB::rollBack(); OperateLog::addLogs($this->getUser(), "更新角色失败", $exception->getMessage()); return $this->fail([$exception->getCode(), $exception->getMessage()]); } } /** * @OA\Post( * path="/api/admin/role/delete", * tags={"后台管理"}, * summary="删除角色", * description="", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="id", in="query", @OA\Schema(type="integer"), description="ID"), * @OA\Response( * response="200", * description="删除角色" * ) * ) */ public function delete(Request $request) { $role = Role::find($request->id); try { $role->delete(); OperateLog::addLogs($this->getUser(), "删除角色[$role->name]成功"); return $this->success("删除成功"); } catch (\Exception $exception) { OperateLog::addLogs($this->getUser(), "删除角色[$role->name]失败"); return $this->fail([$exception->getCode(), $exception->getMessage()]); } } /** * @OA\Post( * path="/api/admin/role/set-permissions", * tags={"后台管理"}, * summary="角色授权", * description="", * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), * @OA\Parameter(name="id", in="query", @OA\Schema(type="integer"), required=true, description="ID"), * @OA\Parameter(name="permission_list", in="query", @OA\Schema(type="object"), required=true, description="二维数组形式,包括:permission_id权限id,auth_node_tags英文逗号分隔的权限标示"), * @OA\Response( * response="200", * description="角色授权" * ) * ) */ public function setPermissions(Request $request) { $all = request()->all(); DB::beginTransaction(); try { $role = Role::find($all['id']); if (isset($all['permission_list'])) { $role->roleHasPermissions()->delete(); $role->roleHasPermissions()->createMany($all['permission_list']); } DB::commit(); OperateLog::addLogs($this->getUser(), "角色批量授权成功"); return $this->success("授权成功"); } catch (\Exception $exception) { DB::rollBack(); // 加日志 OperateLog::addLogs($this->getUser(), "角色批量授权失败"); return $this->fail([$exception->getCode(), $exception->getMessage()]); } } }