feat: Improve the front-end and back-end permission mode and useAccess
This commit is contained in:
@@ -36,7 +36,7 @@
|
||||
"@nestjs/cli": "^10.4.2",
|
||||
"@nestjs/schematics": "^10.1.2",
|
||||
"@types/express": "^4.17.21",
|
||||
"@types/node": "^20.14.9",
|
||||
"@types/node": "^20.14.10",
|
||||
"nodemon": "^3.1.4",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.5.3"
|
||||
|
@@ -19,6 +19,16 @@ import { AuthService } from './auth.service';
|
||||
export class AuthController {
|
||||
constructor(private authService: AuthService) {}
|
||||
|
||||
/**
|
||||
* 获取用户权限码
|
||||
* @param req
|
||||
*/
|
||||
@Get('getAccessCodes')
|
||||
@HttpCode(HttpStatus.OK)
|
||||
async getAccessCodes(@Request() req: Request) {
|
||||
return await this.authService.getAccessCodes(req.user.username);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
* @param req
|
||||
|
@@ -19,6 +19,30 @@ export class AuthService {
|
||||
* get user info
|
||||
* @param username
|
||||
*/
|
||||
async getAccessCodes(username: string): Promise<string[]> {
|
||||
const user = await this.usersService.findOne(username);
|
||||
|
||||
const mockCodes = [
|
||||
// super
|
||||
{
|
||||
codes: ['AC_100100', 'AC_100110', 'AC_100120', 'AC_100010'],
|
||||
userId: 0,
|
||||
},
|
||||
{
|
||||
// admin
|
||||
codes: ['AC_100010', 'AC_100020', 'AC_100030'],
|
||||
userId: 1,
|
||||
},
|
||||
{
|
||||
// user
|
||||
codes: ['AC_1000001', 'AC_1000002'],
|
||||
userId: 2,
|
||||
},
|
||||
];
|
||||
|
||||
return mockCodes.find((item) => item.userId === user.id)?.codes ?? [];
|
||||
}
|
||||
|
||||
async getUserInfo(username: string): Promise<Omit<UserEntity, 'password'>> {
|
||||
const user = await this.usersService.findOne(username);
|
||||
const { password: _pass, ...userInfo } = user;
|
||||
|
@@ -10,7 +10,7 @@ export class MenuController {
|
||||
@HttpCode(HttpStatus.OK)
|
||||
async getAll(@Request() req: Request) {
|
||||
// 模拟请求延迟
|
||||
await sleep(1000);
|
||||
await sleep(500);
|
||||
// 请求用户的id
|
||||
const userId = req.user.id;
|
||||
|
||||
@@ -46,15 +46,110 @@ export class MenuController {
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const createDemosMenus = (role: 'admin' | 'super' | 'user') => {
|
||||
const roleWithMenus = {
|
||||
admin: {
|
||||
component: '/demos/access/backend/access-test-2',
|
||||
meta: {
|
||||
icon: 'mdi:button-cursor',
|
||||
title: 'page.demos.access.access-test-2',
|
||||
},
|
||||
name: 'AccessBackendTest2',
|
||||
path: 'access-test-2',
|
||||
},
|
||||
super: {
|
||||
component: '/demos/access/backend/access-test-1',
|
||||
meta: {
|
||||
icon: 'mdi:button-cursor',
|
||||
title: 'page.demos.access.access-test-1',
|
||||
},
|
||||
name: 'AccessBackendTest1',
|
||||
path: 'access-test-1',
|
||||
},
|
||||
user: {
|
||||
component: '/demos/access/backend/access-test-3',
|
||||
meta: {
|
||||
icon: 'mdi:button-cursor',
|
||||
title: 'page.demos.access.access-test-3',
|
||||
},
|
||||
name: 'AccessBackendTest3',
|
||||
path: 'access-test-3',
|
||||
},
|
||||
};
|
||||
|
||||
return [
|
||||
{
|
||||
component: 'BasicLayout',
|
||||
meta: {
|
||||
icon: 'ic:baseline-view-in-ar',
|
||||
keepAlive: true,
|
||||
order: 1000,
|
||||
title: 'page.demos.title',
|
||||
},
|
||||
name: 'Demos',
|
||||
path: '/demos',
|
||||
redirect: '/demos/access',
|
||||
children: [
|
||||
{
|
||||
meta: {
|
||||
icon: 'mdi:shield-key-outline',
|
||||
title: 'page.demos.access.title',
|
||||
},
|
||||
name: 'Access',
|
||||
path: 'access',
|
||||
redirect: '/demos/access/backend',
|
||||
children: [
|
||||
{
|
||||
name: 'AccessBackend',
|
||||
path: 'backend',
|
||||
meta: {
|
||||
icon: 'mdi:cloud-key-outline',
|
||||
title: 'page.demos.access.backend-control',
|
||||
},
|
||||
redirect: '/demos/access/backend/page-control',
|
||||
children: [
|
||||
{
|
||||
name: 'AccessBackendPageControl',
|
||||
path: 'page-control',
|
||||
component: '/demos/access/backend/index',
|
||||
meta: {
|
||||
icon: 'mdi:page-previous-outline',
|
||||
title: 'page.demos.access.page',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'AccessBackendButtonControl',
|
||||
path: 'button-control',
|
||||
component: '/demos/access/backend/button-control',
|
||||
meta: {
|
||||
icon: 'mdi:button-cursor',
|
||||
title: 'page.demos.access.button',
|
||||
},
|
||||
},
|
||||
roleWithMenus[role],
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
};
|
||||
|
||||
const MOCK_MENUS = [
|
||||
{
|
||||
menus: [...dashboardMenus],
|
||||
menus: [...dashboardMenus, ...createDemosMenus('super')],
|
||||
userId: 0,
|
||||
},
|
||||
{
|
||||
menus: [...dashboardMenus],
|
||||
menus: [...dashboardMenus, ...createDemosMenus('admin')],
|
||||
userId: 1,
|
||||
},
|
||||
{
|
||||
menus: [...dashboardMenus, ...createDemosMenus('user')],
|
||||
userId: 2,
|
||||
},
|
||||
];
|
||||
|
||||
return MOCK_MENUS.find((item) => item.userId === userId)?.menus ?? [];
|
||||
|
Reference in New Issue
Block a user