- 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 外贸电商独立站建站
我的网站