按钮级权限管理系统

Posted 轻松的小希

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按钮级权限管理系统相关的知识,希望对你有一定的参考价值。

项目简介

CommonAdmin是一个按钮级权限管理系统,包含企业后台最常用的系统模块,代码简洁,开箱即用。

访问地址:https://gitee.com/caochenlei/common-admin

  • 前端文档:https://panjiachen.gitee.io/vue-element-admin-site/zh/
  • 后端文档:https://docs.spring.io/spring-boot/docs/current/reference/html/

主要功能

  • 登录功能

  • 部门管理


  • 用户管理



  • 角色管理



  • 菜单管理


  • 日志管理


采用技术

前端技术栈:

技术名称采用版本官方地址
vue-element-admin4.4.0点击访问

后端技术栈:

技术名称采用版本官方地址
Spring Boot2.5.3点击访问
Spring Security5.5.1点击访问
Undertow2.2.9点击访问
MyBatis3.5.7点击访问
JJWT0.11.2点击访问
Knife4j3.0.3点击访问

开发的工具:

工具名称采用版本下载地址
IntelliJ IDEA2021.1下载地址
Maven3.6.3下载地址
mysql5.7.34下载地址
Redis3.2.100下载地址
Visual Studio Code1.58.2下载地址
Node.js14.17.1下载地址
Java JDK1.8.0_291下载地址

目录介绍

common-admin         前端工程
common-admin-server  后端工程

common-admin目录介绍:

├─plop-templates                           模板文件,可以使用npm new来创建,可以用代码生成器代替
├─public
└─src
    │  App.vue                             根组件              
    │  main.js                             入口文件
    │  permission.js                       权限控制
    │  settings.js                         全局设置
    ├─api
    │      sysDepartment.js                存放访问后端系统部门接口api
    │      sysLog.js                       存放访问后端系统日志接口api
    │      sysMenu.js                      存放访问后端系统菜单接口api
    │      sysRole.js                      存放访问后端系统角色接口api
    │      sysUser.js                      存放访问后端系统用户接口api
    ├─assets                               静态资源
    ├─components                           组件库
    ├─directive                            指令集
    ├─filters                              过滤器
    ├─icons                                SVG图标
    ├─layout                               后台布局
    ├─router                               全局路由
    ├─store                                全局存储
    ├─styles                               样式库
    ├─utils                                工具类
    └─views
        ├─dashboard
        │      index.vue                   默认首页
        ├─login
        │      index.vue                   登录页面
        ├─redirect
        │      index.vue                   重定向
        └─system
            ├─department
            │      index.vue               系统部门管理页面
            ├─log
            │      index.vue               系统日志管理页面
            ├─menu
            │      index.vue               系统菜单管理页面
            ├─role
            │      index.vue               系统角色管理页面
            └─user
                    index.vue              系统用户管理页面

common-admin-server目录介绍:

│  pom.xml                                                              项目依赖
└─src
    └─main
        ├─java
        │  └─io
        │      └─github
        │          └─caochenlei
        │              │  MainApplication.java                           主启动类
        │              ├─annotation
        │              │      SysLogRecord.java                          系统日志注解
        │              ├─aspect
        │              │      SysLogAspect.java                          系统日志切面
        │              ├─common
        │              │      Constant.java                              全局常量
        │              │      Payload.java                               JWT载荷
        │              ├─config
        │              │      AsyncConfig.java                           异步线程池配置
        │              │      ImageCodeConfig.java                       图片验证码配置
        │              │      RedisConfig.java                           Redis访问配置
        │              │      SwaggerConfig.java                         接口文档配置
        │              │      WebMvcConfig.java                          解决跨域配置
        │              │      WebSecurityConfig.java                     登录/权限配置
        │              │      WebServerFactoryCustomizerConfig.java      解决Undertow警告配置
        │              ├─controller
        │              │      SysDepartmentController.java
        │              │      SysLogController.java
        │              │      SysMenuController.java
        │              │      SysRoleController.java
        │              │      SysUserController.java
        │              ├─domain
        │              │      SysDepartment.java
        │              │      SysLog.java
        │              │      SysMenu.java
        │              │      SysRole.java
        │              │      SysUser.java
        │              ├─dto
        │              │      SysUserInfoDTO.java                       载荷中传输的用户对象
        │              ├─exception
        │              │      AuthTokenException.java                   Token认证失败异常
        │              │      AuthTokenExpiredException.java            Token时间过期异常
        │              │      CustomAuthenticationException.java        自定义认证失败异常
        │              │      ImageCodeException.java                   图片验证码失败异常
        │              ├─filter
        │              │      CustomAuthenticationFilter.java           请求验证过滤器(重要)
        │              ├─handler
        │              │      CustomAccessDeniedHandler.java            无权限访问处理器
        │              │      CustomAuthenticationEntryPointHandler.java无权限访问处理器
        │              │      CustomAuthenticationFailureHandler.java   登录失败处理器
        │              │      CustomAuthenticationSuccessHandler.java   登录成功处理器
        │              │      GlobalExceptionHandler.java               全局控制器异常处理器
        │              ├─mapper
        │              │      SysDepartmentMapper.java
        │              │      SysLogMapper.java
        │              │      SysMenuMapper.java
        │              │      SysRoleMapper.java
        │              │      SysUserMapper.java
        │              ├─prop
        │              │      RsaKeyProperties.java                     获取RSA公/私钥配置对象
        │              ├─service
        │              │  │  SysDepartmentService.java
        │              │  │  SysLogAsyncService.java
        │              │  │  SysLogService.java
        │              │  │  SysMenuService.java
        │              │  │  SysRoleService.java
        │              │  │  SysUserService.java
        │              │  └─impl
        │              │          SysDepartmentServiceImpl.java
        │              │          SysLogAsyncServiceImpl.java
        │              │          SysLogServiceImpl.java
        │              │          SysMenuServiceImpl.java
        │              │          SysRoleServiceImpl.java
        │              │          SysUserDetailsServiceImpl.java        登录时验证用户/获取权限
        │              │          SysUserServiceImpl.java
        │              │          SysUserTokenServiceImpl.java          Token处理服务类
        │              ├─utils
        │              │      IpUtils.java                              获取客户端请求IP工具类
        │              │      JsonUtils.java                            JSON解析工具类
        │              │      JwtUtils.java                             Token解析/生成工具类
        │              │      MakeUtils.java                            部门树、菜单树、路由表工具类
        │              │      RegionUtils.java                          通过IP地址获取区域工具类
        │              │      RsaUtils.java                             用于生成RSA公/私钥,用来加密
        │              └─vo
        │                      PermissionVo.java                        回显前端权限
        │                      ResultVo.java                            回显前端统一处理结果
        │                      RouterVo.java                            回显前端路由表
        │                      SysUserInfoVo.java                       回显前端系统用户信息
        │                      TokenVo.java                             回显前端Token
        └─resources
            │  application.yml                                          系统配置
            │  banner.txt                                               启动Banner自定义信息
            │  mybatis-config.xml                                       MyBatis配置
            ├─mapper
            │      SysDepartmentMapper.xml
            │      SysLogMapper.xml
            │      SysMenuMapper.xml
            │      SysRoleMapper.xml
            │      SysUserMapper.xml
            └─rsa
                    rsa_key                                             RSA私钥
                    rsa_key.pub                                         RSA公钥

项目安装

# 导入数据库,注意数据库账号和密码
common-admin.sql
# 克隆项目
git clone https://gitee.com/caochenlei/common-admin.git

common-admin-server安装及启动:

# 进入后端
cd common-admin-server

# 安装依赖
mvn install

# 运行项目
mvn spring-boot:run

common-admin安装及启动:

# 进入前端
cd common-admin

# 安装依赖
cnpm install

# 运行项目
npm run dev
访问地址:http://localhost:9527/
登录账号:zhangsan
登录密码:123456

快速开发

为了能够进行快速开发,可以使用我的另一个开源项目《代码生成器》,我已经内置了一套关于《Common-Admin》的开发模板。

软件下载地址:https://gitee.com/caochenlei/code-builder/releases/v1.0.0

但是一定注意:JDK 8,如果JDK不是8可能不会正常运行。

如果你想了解代码生成的整个细节,可以使用CMD命令行的方式启动。

java -jar CodeBuilder-1.0.0.jar

第一步:获取数据库名,然后选择《common-admin》,最后点击开始生成代码

第二步:修改工程包名,然后选择《Common-Admin》,最后点击一键生成代码

第三步:查看生成代码,然后拷贝到对应前后端工程文件夹,最后保存以后重新启动

注意事项

问题一:为什么采用Undertow而不是Tomcat

回答一:项目整个的开发环境采用的是主流的JDK 8,在这个环境下,如果我采用最新的Spring Boot,那么Spring Boot内置的Tomcat的版本为9.x,而Tomcat 9.x需要JDK 8及以上的支持,有人会想说,这不版本挺对应的吗,实际上,JDK 8对Tomcat 9.x支持还是有些问题,如果你用DEBUG模式启动后端项目就会发现有几个报错的地方,主要是找不到class文件,因此,我决定更换为Undertow。

问题二:如果我想用Tomcat应该怎么调整回去?

回答二:找到POM.XML,然后对这段依赖进行修改,将注释下的内容全部删去。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- Remove default Tomcat container-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- Add Undertow container -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
    <groupId>io.undertow</groupId>
    <artifactId>undertow-websockets-jsr</artifactId>
</dependency>

再找到io.github.caochenlei.config.WebServerFactoryCustomizerConfig,然后删掉。

问题三:前端组件的路径有没有一定规范?

回答三:有,需要按照《主功能模块名/次功能模块名》这种形式来存放生成出来的views界面,并且需要修改组件名为index.vue。


问题四:如何实现的按钮级别权限管理?

回答四:

  • 后端使用@PreAuthorize("hasAuthority('sys:department:add')")注解来控制后端方法的访问权限
  • 前端使用v-if="checkPermission(['sys:department:add'])"方法来控制按钮是否显示到页面

问题五:如何生成自己的RSA公/私钥?

回答五:在工程里新建RsaUtilsTest,然后运行以下代码生成即可。

public class RsaUtilsTest {
    private String publicFile = "D:\\\\auth_key\\\\rsa_key.pub";
    private String privateFile = "D:\\\\auth_key\\\\rsa_key";
    private String secret = "123456789abcdefg";

    @Test
    public void generateKey() throws Exception {
        RsaUtils.generateKey(publicFile, privateFile, secret, 2048);
    }
}

生成后的文件可以直接替换工程默认的RSA公/私钥,也可以在application.yml中配置指定路径。

问题六:系统关于时间类型的处理?

回答六:系统后端所有时间字段需要手动加以下两个注解,代码生成器不会生成,第一个是用于返回前端的格式,第二个是序列化时采用的格式。

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime createTime;//创建时间

如果您有其他的问题,请联系作者或者关注CSDN进行私信。

下个版本

  • 新增个人修改密码
  • 新增系统数据字典
  • 新增通用上传接口(本地存储、阿里云、腾讯云、七牛云)

联系作者

Email:774908833@qq.com

CSDN:https://caochenlei.blog.csdn.net/

以上是关于按钮级权限管理系统的主要内容,如果未能解决你的问题,请参考以下文章

vue电商后台管理系统保姆级教程——分配权限 角色

java SSM框架 websocket即时通讯 代码生成器 shiro redis 后台框架源码

教程4 - 验证和权限

net core体系-web应用程序-4asp.net core2.0 项目实战-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

SpringMVC+Mybatis框架整合源码