权限管理初探

本文深入解析了传统项目中的权限管理,包括数据库设计(一一对多和多对多版本)、JavaBean创建、持久层代码示例,重点讲解了如何通过shiro框架实现动态权限显示。涉及表结构、用户角色菜单关系及其实现策略。
摘要由CSDN通过智能技术生成

权限管理

在传统项目中,权限管理是很重要、也是比较复杂的一个问题

我之前,就是苦于没有一个完整的教学项目,讲这方面的知识

今天,我就在这里,分享一下,传统的权限管理方法

关于怎么使用 shiro 等框架,实现权限管理,这个我会在以后讲

首先先把传统项目中的权限管理方式搞明白了

数据库分析与创建

数据库表有两种组织形式

我们的讲解,以较为容易的版本1为主

版本1:

这个版本下,一个用户,只对应一个角色,而一个角色,可以包含多个用户,是一个一对多的关系;即用户表中,要有一个列,表示角色

image2

版本2:

一个用户可以有多个角色

是一个多对多的关系

所以,需要三张表

image1

建库语句

这里给出四张表的建库语句,方便大家测试

# 用户表
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
     `userid` int NOT NULL AUTO_INCREMENT,
     `loginname` varchar(10) DEFAULT NULL,
     `password` varchar(12) DEFAULT NULL,
     `realname` varchar(10) DEFAULT NULL,
     `sex` int DEFAULT NULL,
     `email` varchar(20) DEFAULT NULL,
     `address` varchar(50) DEFAULT NULL,
     `phone` varchar(12) DEFAULT NULL,
     `cardid` varchar(20) DEFAULT NULL,
     `desc` varchar(50) DEFAULT NULL,
#      用户是1方,角色是多方
     `roleid` int DEFAULT NULL,
     PRIMARY KEY (`userid`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


# 角色表
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
    `roleid` int NOT NULL AUTO_INCREMENT,
    `rolename` varchar(10) DEFAULT NULL,
    `rolestate` int DEFAULT NULL COMMENT '0 禁用 1 启用',
    PRIMARY KEY (`roleid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



# 中间表 (角色表和菜单表之间的关系)
DROP TABLE IF EXISTS `middle`;
CREATE TABLE `middle` (
  `middleid` int NOT NULL AUTO_INCREMENT,
  `roleid` int DEFAULT NULL,
  `menuid` int DEFAULT NULL,
  PRIMARY KEY (`middleid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


# 菜单表(其实就是用户的权限表)
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu` (
    `menuid` int NOT NULL AUTO_INCREMENT,
    `menuname` varchar(255) DEFAULT NULL comment '菜单名称',
    `upmenuid` int DEFAULT NULL comment '上一级菜单的id  如果为0,表示的是 顶级菜单  这个菜单的实现方式,就是无限级数的实现方式',
    `state` int DEFAULT NULL comment '菜单状态 1为启用  0为禁用',
    `desc` varchar(50) DEFAULT NULL comment '菜单介绍',
    `url` varchar(20) DEFAULT NULL,
    PRIMARY KEY (`menuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
menu 表:

这里要对 menu 表做个解释,不然可能看的有点模糊

如果看了下面的图,还是不懂,可以去搜一下 无限级数

image-20210518185049523

其中的url:

表示点击这个菜单后,走的请求

这个请求,我们会放在数据库中

image-20210518185706512

middle 表:

middle 表示角色和权限的关系

什么角色,有什么权限,就是在这张表中展示的

image-20210518185442740

创建 JavaBean

省略构造器和 getter setter toString

这里,主要

users:

public class Users {
    private Integer userId;
    private String loginName;
    private String password;
    private String realName;
    private Integer sex;
    private String email;
    private String address;
    private String phone;
    private String cardId;
    private String desc;
    private Integer roleId;

    //这里,要有一个对象,指向 roleId代表的Role对象
    private Role role;
}

role:

public class Role {
    private Integer roleId;
    private String roleName;
    private Integer roleState;

    //包含多个用户信息
    private List<Users> usersList;
    //与menu是多对多关系
    private List<Menu> menuList;
}

menu:

public class Menu {
    private Integer menuId;
    private String menuName;
    private Integer upmenuId;
    private Integer state;
    private String desc;
    private String url;
    //与role是多对多关系
    private List<Role> roleList;
}

注意:

中间表不需要创建实体类,其作用,只是为了方便在数据库中查询

编写持久层代码

这里就不演示了,就是一般的 DAO和DAO实现,各位可以按照自己的习惯,选择框架去实现

前端

前端也就是一般的业务逻辑所包含的内容,这里也不再演示

动态权限显示

这里,我们在每次登录成功的时候,就会按照这个用户,去查其对应的角色,然后,再去查看这个角色所对应的权限,最后,将这个权限动态的显示在用户可以操作的部分

这里因为代码比较复杂,我就不演示了

主要要理解的,就是一开始那4张表和五张表的图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FARO_Z

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

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

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

打赏作者

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

抵扣说明:

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

余额充值