- ant design pro 如何去保存颜色
- ant design pro v6 如何做好角色管理
- ant design 的 tree 如何作为角色中的权限选择之一
- ant design 的 tree 如何作为角色中的权限选择之二
- ant design pro access.ts 是如何控制多角色的权限的
- ant design pro 中用户的表单如何控制多个角色
- ant design pro 如何实现动态菜单带上 icon 的
- ant design pro 的表分层级如何处理
ant design pro 的前端去处理权限好处理的,弄个增删改查。直接去发请求就好。
主要是后端,如何存权限的信息,要存什么信息,如何验证。
import mongoose, { Document } from 'mongoose';
import { IPermissionGroup } from './permissionGroup';
export interface IPermission extends Document {
name: string;
path: string;
action: string;
permissionGroup: IPermissionGroup;
createdAt?: Date;
updatedAt?: Date;
}
const permissionSchema = new mongoose.Schema({
name: { type: String, required: true },
path: { type: String, required: true },
action: { type: String, required: true },
permissionGroup: { type: mongoose.Schema.Types.ObjectId, ref: 'PermissionGroup' },
}, { timestamps: true });
const Permission = mongoose.model<IPermission>('Permission', permissionSchema);
export default Permission;
name 是显示出来给看的,主要是 path action 这两个结合起来,来标明一个唯一的权限。
一个路径,一个 是请求方法。
如何去检查是否有权限呢。
const checkPermission = handleAsync(
async (req: IRequest, res: Response, next: NextFunction) => {
const { pageSize } = req.query as { pageSize?: string };
if (pageSize && pageSize === '10000') {
return next();
}
const path = req.baseUrl + req.route.path;
const action = req.method;
console.log('Checking path for permission', path);
if (req.user.isAdmin) {
return next();
}
if (allowedPaths.some((str) => path.startsWith(str))) {
return next();
}
const roles = req.user.roles as { permissions: IPermission[] }[];
if (roles.length === 0) {
res.status(403);
throw new Error('Access Denied');
}
const isAllowed = (permissions: IPermission[]) => {
return permissions.some((permission) => {
return permission.path === path && permission.action === action;
});
};
if (roles.some((role) => isAllowed(role.permissions))) {
next();
} else {
res.status(403);
throw new Error('Access Denied');
}
},
);
这是个中间件,只要在路由里先用上就行,就是先检查一下是否有权限
首先如果是超级管理员,是直接跳过的。因为有所有的权限
if (req.user.isAdmin) {
return next();
}
然后再判断是否有角色的,角色都没有,肯定没有权限了。
最后才是在所有角色里找到权限来判断,依据的标准是 path action 这两个。
刚好这两个我们是能取到的,在请求里取到值,跟用户存的数据库的数据匹配即可。
就是角色里的权限数据匹配。
所以 current user 是要存 roles, roles 里又要存权限的。
我们拥有 12 年建站编程经验
- 虚拟产品交易平台定制开发
- WordPress 外贸电商独立站建站