初始化本地仓库
This commit is contained in:
@@ -0,0 +1,346 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
*+------------------
|
||||
* madong
|
||||
*+------------------
|
||||
* Copyright (c) https://gitee.com/motion-code All rights reserved.
|
||||
*+------------------
|
||||
* Author: Mr. April (405784684@qq.com)
|
||||
*+------------------
|
||||
* Official Website: http://www.madong.tech
|
||||
*/
|
||||
|
||||
namespace app\adminapi\controller\system;
|
||||
|
||||
use app\adminapi\controller\Crud;
|
||||
use app\adminapi\CurrentUser;
|
||||
use app\adminapi\event\MenuFormattingEvent;
|
||||
use app\adminapi\middleware\AccessTokenMiddleware;
|
||||
use app\adminapi\middleware\OperationMiddleware;
|
||||
use support\Container;
|
||||
use app\adminapi\middleware\PermissionMiddleware;
|
||||
use app\adminapi\validate\system\AuthValidate;
|
||||
use app\service\admin\system\AdminRoleService;
|
||||
use app\service\admin\system\AdminService;
|
||||
use app\service\admin\system\AuthService;
|
||||
use app\service\admin\system\MenuService;
|
||||
use app\service\admin\system\RoleMenuService;
|
||||
use app\service\admin\system\RoleScopeDeptService;
|
||||
use app\service\admin\system\RoleService;
|
||||
use madong\swagger\attribute\AllowAnonymous;
|
||||
use madong\swagger\attribute\Permission;
|
||||
use core\exception\handler\UnauthorizedHttpException;
|
||||
use core\jwt\JwtToken;
|
||||
use core\tool\Json;
|
||||
use madong\helper\Dict;
|
||||
use madong\swagger\annotation\response\SimpleResponse;
|
||||
use OpenApi\Attributes as OA;
|
||||
use support\Request;
|
||||
use support\annotation\Middleware;
|
||||
use Webman\Event\Event;
|
||||
|
||||
#[Middleware(AccessTokenMiddleware::class, PermissionMiddleware::class, OperationMiddleware::class)]
|
||||
final class AuthController extends Crud
|
||||
{
|
||||
public function __construct(AuthService $service, AuthValidate $validate)
|
||||
{
|
||||
$this->service = $service;
|
||||
$this->validate = $validate;
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/user-info',
|
||||
summary: '获取登录用户',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:user_info')]
|
||||
#[AllowAnonymous(requireToken: true, requirePermission: false)]
|
||||
#[SimpleResponse(example: '{"code": 0,"msg": "ok","data": {"id": "1","user_name": "admin","real_name": "超级管理员","nick_name": "超级管理员","is_super": 1,"mobile_phone": null,"email": null,"avatar": null,"signed": null,"dashboard": null,"dept_id": "","enabled": 1,"login_ip": "127.0.0.1","login_time": 1762429533,"created_by": null,"updated_by": null,"created_at": "2025-10-30T12:24:09.000000Z","updated_at": "2025-11-06T11:45:34.000000Z","deleted_at": null,"sex": 0,"remark": null,"birthday": null,"tel": null,"is_locked": 0,"role_id_list": [],"post_id_list": [],"created_date": "2025-10-30 20:24:09","updated_date": "2025-11-06 19:45:34","depts": [],"posts": [],"casbin": [],"roles": []}}')]
|
||||
public function getUserInfo(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
/** @var CurrentUser $currentUser */
|
||||
$currentUser = Container::make(CurrentUser::class);
|
||||
$data = $currentUser->admin(true);
|
||||
if (empty($data)) {
|
||||
throw new UnauthorizedHttpException('用户凭证失效请重新登录');
|
||||
}
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), null, 401);
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/user-menus',
|
||||
summary: '获取用户-权限菜单',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:user_menus')]
|
||||
#[AllowAnonymous(requireToken: true, requirePermission: false)]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
public function getPermissionsMenu(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$format = input('format', 'default');
|
||||
/** @var CurrentUser $currUser */
|
||||
$currUser = Container::make(CurrentUser::class);
|
||||
$collection = $this->service->getMenusByUserRoles($currUser, true);
|
||||
$event = new MenuFormattingEvent($collection, $format);
|
||||
$data = $event->dispatch();
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/user-permissions',
|
||||
summary: '权限菜单-包含所有 菜单 按钮 接口',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:user_permissions')]
|
||||
#[SimpleResponse(example: '{"code": 0,"msg": "ok","data": []}')]
|
||||
public function getPermissions(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$format = input('format', 'default');
|
||||
/** @var CurrentUser $currUser */
|
||||
$currUser = Container::make(CurrentUser::class);
|
||||
$collection = $this->service->getMenusByUserRoles($currUser, true);
|
||||
$event = new MenuFormattingEvent($collection, $format);
|
||||
$data = $event->dispatch();
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/perm-code',
|
||||
summary: '获取用户-权限码',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:perm_code')]
|
||||
#[AllowAnonymous(requireToken: true, requirePermission: false)]
|
||||
#[SimpleResponse(example: '{"code": 0,"msg": "ok","data": ["admin"]}')]
|
||||
public function getUserCodes(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
/** @var CurrentUser $currUser */
|
||||
$currUser = Container::make(CurrentUser::class);
|
||||
$data = $this->service->getCodesByUserRoles($currUser);
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/role-menu-ids',
|
||||
summary: '通过角色ID获取权限ID集合',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:role_menu_ids')]
|
||||
#[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])]
|
||||
public function roleMenuIds(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$roleId = $request->input('role_id');
|
||||
/** @var RoleService $systemRoleService */
|
||||
$systemRoleService = Container::make(RoleService::class);
|
||||
$data = $systemRoleService->getPermissionColumns($roleId);
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/role-scope-ids',
|
||||
summary: '通过角色ID获取权限范围自定义部门ID集合',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:role_scope_ids')]
|
||||
#[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])]
|
||||
public function roleScopeIds(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$roleId = $request->input('role_id');
|
||||
/** @var RoleScopeDeptService $systemRoleMenuService */
|
||||
$systemRoleMenuService = Container::make(RoleScopeDeptService::class);
|
||||
$data = $systemRoleMenuService->getColumn(['role_id' => $roleId], 'dept_id');
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[OA\Post(
|
||||
path: '/system/auth/save-role-menu',
|
||||
summary: '保存角色菜单关系',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:role_menu')]
|
||||
#[SimpleResponse(schema: [], example: [])]
|
||||
public function saveRoleMenuRelation(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$data = $request->all();
|
||||
/** @var RoleMenuService $systemRoleMenuService */
|
||||
$systemRoleMenuService = Container::make(RoleMenuService::class);
|
||||
$systemRoleMenuService->save($data);
|
||||
return Json::success('success');
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/user-list-by-role-id',
|
||||
summary: '获取角色-关联用户列表',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: 'role_id',
|
||||
description: '角色ID',
|
||||
in: 'query',
|
||||
required: true,
|
||||
schema: new OA\Schema(type: 'string'),
|
||||
)]
|
||||
#[Permission(code: 'system:auth:role_user_list')]
|
||||
#[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])]
|
||||
public function getUsersByRoleId(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
[$where, $format, $limit, $field, $order, $page] = $this->selectInput($request, [
|
||||
'exclude_filters' => true,
|
||||
'filter_format' => 'simple', // 简洁模式没有操作符
|
||||
'custom_fields' => [
|
||||
'user_name',
|
||||
'real_name',
|
||||
'mobile_phone',
|
||||
'role_id',
|
||||
],
|
||||
]);
|
||||
/** @var AdminService $systemUserService */
|
||||
$systemUserService = Container::make(AdminService::class);
|
||||
$data = $systemUserService->getUsersListByRoleId($where, $field, $page, $limit);
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[OA\Post(
|
||||
path: '/system/auth/save-user-role',
|
||||
summary: '保存用户-关联角色',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:save_user_role')]
|
||||
#[SimpleResponse(example: '{"code": 0,"msg": "success"}')]
|
||||
public function saveUserRoles(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$data = $request->all();
|
||||
/** @var AdminRoleService $systemUserRoleService */
|
||||
$systemUserRoleService = Container::make(AdminRoleService::class);
|
||||
$systemUserRoleService->saveUserRoles($data);
|
||||
return Json::success('success');
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Post(
|
||||
path: '/system/auth/remove-user-role',
|
||||
summary: '移除用户-关联角色',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:remove_user_role')]
|
||||
#[SimpleResponse(example: '{"code": 0,"msg": "ok"}')]
|
||||
public function removeUserRole(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
$data = $request->all();
|
||||
/** @var AdminRoleService $systemUserRoleService */
|
||||
$systemUserRoleService = Container::make(AdminRoleService::class);
|
||||
$systemUserRoleService->removeUserRole($data);
|
||||
return Json::success('ok');
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
#[OA\Get(
|
||||
path: '/system/auth/user-list-exclude-role-id',
|
||||
summary: '获取用户列表-排除指定角色id',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[OA\Parameter(
|
||||
name: 'role_id',
|
||||
description: '角色ID',
|
||||
in: 'query',
|
||||
required: true,
|
||||
schema: new OA\Schema(type: 'string'),
|
||||
)]
|
||||
#[Permission(code: 'system:auth:user_list_exclude_role')]
|
||||
#[SimpleResponse(example: ['code' => 0, 'message' => 'success', 'data' => []])]
|
||||
public function getUsersExcludingRole(Request $request): \support\Response
|
||||
{
|
||||
try {
|
||||
[$where, $format, $limit, $field, $order, $page] = $this->selectInput($request, [
|
||||
'exclude_filters' => true,
|
||||
'filter_format' => 'simple', // 简洁模式没有操作符
|
||||
'custom_fields' => [
|
||||
'LIKE_user_name',
|
||||
'LIKE_real_name',
|
||||
'LIKE_mobile_phone',
|
||||
'role_id',
|
||||
]]);
|
||||
$systemUserService = Container::make(AdminService::class);
|
||||
$data = $systemUserService->getUsersExcludingRole($where, $field, $page, $limit);
|
||||
return Json::success('ok', $data);
|
||||
} catch (\Throwable $e) {
|
||||
return Json::fail($e->getMessage(), [], $e->getCode());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \core\jwt\ex\JwtRefreshTokenExpiredException
|
||||
*/
|
||||
#[OA\Post(
|
||||
path: '/system/auth/refresh-token',
|
||||
summary: '刷新Token',
|
||||
security: [['Bearer' => [], 'ApiKey' => []]],
|
||||
tags: ['权限相关'],
|
||||
)]
|
||||
#[Permission(code: 'system:auth:refresh_token')]
|
||||
#[AllowAnonymous(requireToken: false, requirePermission: false)]
|
||||
#[SimpleResponse(example: '{"data": "new_access_token"}')]
|
||||
public function refreshToken(Request $request): \support\Response
|
||||
{
|
||||
$token = (new JwtToken())->refresh();
|
||||
return Json::success('ok', [
|
||||
'access_token' => $token->accessToken,
|
||||
'refresh_token' => $token->refreshToken,
|
||||
'expires_in' => $token->expiresIn,
|
||||
'expires_at' => $token->expiresAt->getTimestamp(),
|
||||
]);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user