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 年建站编程经验

  1. 虚拟产品交易平台定制开发
  2. WordPress 外贸电商独立站建站

我的网站

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员随风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值