自用的后台管理系统菜单增删改查的基本权限管理

2 篇文章 0 订阅

分享一个自己一直在用的后台管理系统的权限管理

下面先贴出相应的数据库表

管理员信息表:
admin表
菜单表(对应vue的路由):
在这里插入图片描述
角色表:
在这里插入图片描述
角色菜单关联表:
在这里插入图片描述
思路如下:
在admin登录时,将登录时生成的token保存到vue组件。然后查询对应的角色信息,根据角色id查询role_permission表所关联的菜单权限信息,返回给vue里面控制管理系统左侧菜单栏导航的显示
在这里插入图片描述
到这里已经实现了菜单的权限控制。

下面是菜单所对应的前端页面内的增删改查的控制:

在每次前端通过http请求后端的时候,在header里面带上存储的token,
在这里插入图片描述

然后后端使用自定义注解和AOP的方式实现增删改查权限的控制。
下面是后端代码:

定义权限注解

/**
 * 自定义权限注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface Auth {
	String role();
	String url();
}

AOP

@Order(1)
@Component
@Aspect
@Slf4j
public class AuthAspect {
	
	@Autowired
	AuthService authService;

	@Around("@annotation(com.mikao.config.Auth)")
	public Object around(ProceedingJoinPoint pjp) throws Throwable {
		// 获取请求信息
		ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = sra.getRequest();
		// 获取代理地址、请求地址
		String remoteAddress = IpUtils.getIpAddr(request);
		// 获取token
		String token = request.getHeader("token");
		log.info("token:" + token);
		if (!StringUtils.hasText(token)) {
			log.warn("无效请求:无token IP信息->: 【{}】 ", remoteAddress);
			return BaseResult.getForbidden();
		}
		Long userId = JwtUtil.validateToken(token);
		if (ObjectUtils.isEmpty(userId) || userId == 0L) {
			log.warn("无效请求:无效的token IP信息->: 【{}】 ", remoteAddress);
			return BaseResult.getForbidden();
		}
		Boolean validateToken = authService.validateToken(userId, token);
		if (!validateToken) {
			log.warn("无效请求:token过期   IP信息->: 【{}】 ", remoteAddress);
			return BaseResult.getForbidden();
		}
		// 后台管理权限
		Auth auth = ((MethodSignature) pjp.getSignature()).getMethod().getAnnotation(Auth.class);
		if (ObjectUtils.isNull(auth) || !authService.hasAuth(userId, auth.role(), auth.url())) {
			log.warn("无效请求:无【{}】操作权限   IP信息->: 【{}】 ", auth.role(),remoteAddress);
			return BaseResult.getForbidden();
		}
		return pjp.proceed();
	}

}

AuthService.hasAuth()的实现:

@Override
public Boolean hasAuth(Long adminId, String role, String url) {
	Admin admin = adminDao.selectById(adminId);
	Permission per = permissionDao.selectOne(new QueryWrapper<Permission>().eq("url", url));
	if (ObjectUtils.isNotNull(per)) {
		RolePermission rp = rolePermissionDao
				.selectOne(new QueryWrapper<RolePermission>().eq("rid", admin.getRoleId()).eq("pid", per.getId()));
		if (ObjectUtils.isNotNull(rp)&&((role.equals("select") && rp.getpSelect() == 1) 
					|| (role.equals("insert") && rp.getpInsert() == 1)
					|| (role.equals("update") && rp.getpUpdate() == 1)
					|| (role.equals("delete") && rp.getpDelete() == 1))) {
					return true;
		}
	}
	return false;
}

最后在controller层你需要控制权限的接口上面加上该注解

@Auth(role=“select”,url=“guideImg”)
其中role的值可以是select、insert、update、delete
url的值为上面的permission菜单表里的对应需要控制权限的路由页面的url
在这里插入图片描述
在这里插入图片描述

效果如下:
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你想了解关于使用FastAPI和Snowy搭建后台管理系统的内容,是吗?那么我会为你提供一些相关的信息。 首先,FastAPI是一个基于Python的高性能Web框架,它使用异步编程方式,支持单线程处理多个请求。相比于其他Python框架,FastAPI的运行速度更快,而且使用简单,易于上手。 而Snowy则是一个基于Vue.js的前端UI框架,它提供了一系列的组件和模板,可以快速搭建出美观、易用的后台管理系统。Snowy的特点是轻量级、易于扩展、响应式设计,很适合用于构建现代化的Web应用程序。 要使用FastAPI和Snowy搭建后台管理系统,你可以按照以下步骤进行: 1. 安装FastAPI和相关依赖 使用pip命令安装FastAPI和uvicorn(一个基于ASGI的Web服务器): ``` pip install fastapi uvicorn ``` 2. 创建FastAPI应用程序 在你的Python项目中创建一个FastAPI应用程序,可以使用类似下面的代码: ```python from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"} ``` 这个例子创建了一个简单的FastAPI应用程序,其中定义了一个处理HTTP GET请求的路由(/),返回一个JSON对象。 3. 运行FastAPI应用程序 在终端中使用uvicorn命令来运行FastAPI应用程序: ``` uvicorn main:app --reload ``` 这个命令将启动一个Web服务器,监听本地的8000端口,可以通过浏览器访问http://localhost:8000来测试你的应用程序。 4. 集成Snowy前端框架 通过npm命令安装Snowy框架: ``` npm install snowy ``` 在你的Vue.js应用程序中引入Snowy组件: ```javascript import Vue from 'vue' import Snowy from 'snowy' Vue.use(Snowy) ``` 现在你可以使用Snowy提供的组件来构建你的后台管理系统,例如表格、表单、图表等。你可以参考Snowy的文档来学习如何使用这些组件。 5. 开始构建后台管理系统 现在你可以开始使用FastAPI和Snowy来构建你的后台管理系统了。你可以在FastAPI中定义路由和API接口,提供数据服务,而在Snowy中构建前端页面,展示数据和交互。你可以使用Vue.js的数据绑定和事件处理机制,将前端页面和后端数据连接起来。 总之,使用FastAPI和Snowy搭建后台管理系统可以让你快速开发出高性能、易用的Web应用程序。它们都是开源的项目,拥有广泛的社区支持和生态环境,非常适合用于构建现代化的Web应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值