# web-rbac0
**Repository Path**: qsyout/web-rbac0
## Basic Information
- **Project Name**: web-rbac0
- **Description**: 基于rbac0权限设计的后台管理系统
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 2
- **Created**: 2020-08-20
- **Last Updated**: 2025-05-04
## Categories & Tags
**Categories**: backend
**Tags**: None
## README
#### 介绍
基于rbac0权限设计的后台管理系统,包含了登录、忘记密码、工作台[欢迎页/服务器监控]、组织管理、用户管理、角色管理、菜单管理、数据字典、异常消息、日志管理、数据库工具、个人资料、安全中心等功能;  
通过在pom.xml中引入构件,即可快速地搭建起一套基础的后台管理系统。
集成了json api快速开发组件和xml接口校验组件,简化了持久化层开发步骤,封装一系列满足日常web开发使用的工具类;
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
#### 软件架构
该系统主要构件为web-system-rbac0 1.0.2.RELEASE,该构件中包含了如下第三方依赖:  
    spring-boot 2.0.0.RELEASE  
    mybatis-starter 2.0.0  
    beetl 2.9.3  
    fastjson 1.2.31  
    kaptcha 0.0.9  
前端主要使用了Vue 2.6* + element-ui 2.13*
数据库采用mysql 5.7。
#### 安装教程
仅需下面三步
1、pom.xml引用
```
	
		org.springframework.boot
		spring-boot-starter-parent
		2.0.0.RELEASE
	
……
	
		com.qsyout
		web-system-rbac0
		1.0.7.RELEASE
	
```
2、数据库初始化:  
main方法中执行如下代码:
```
PlatformBuilder.build(...).execute();
```
3、配置完数据库连接即可按照spring-boot 2.0.0.RELEASE项目的使用方式进行启动部署。
#### 使用说明
1、配置文件的使用说明  
    com.qsyout.sdk.log.path=logback日志文件存放路径  
    com.qsyout.sdk.mail.host=邮件服务器地址,推荐使用[smtp.163.com]  
    com.qsyout.sdk.mail.userName=账户名  
    com.qsyout.sdk.mail.password=账户密码  
    com.qsyout.sdk.mail.encoding=UTF-8  
    com.qsyout.sdk.mail.alias=邮件别称  
    com.qsyout.sdk.mail.admin=管理员邮箱地址  发生系统错误时,会将异常错误信息的堆栈发送到管理员邮箱  
    com.qsyout.sdk.sync.dao.threads=10,使用多线程的形式查询数据库,查询连接池的数量,默认10  
    com.qsyout.settings.title=页面title  
    com.qsyout.settings.headerTitle=页面logo内容,默认为后台管理系统  
    com.qsyout.monitor.io.during=3服务器统计磁盘和网卡使用情况的间隔 
2、注解的使用说明  
    @Api    标注在请求的方法上[或者标注在BaseService子类的execute方法上]   
        desc    接口描述  
        open    是否是开放api(不需要登录),默认false  
        permission    接口的权限标识   
        record  是否记录日志(一般指数据库简要日志),默认true   
    @JsonResult    标注在请求的方法上[或者标注在BaseService子类的execute方法上]   
        info    是否提示消息,默认false   
        message    消息提示内容,默认:操作成功
    说明:所有标注JsonResult注解的请求方法,返回统一json结构,示例如下:   
        {
            "status":1200,info:true,message:"操作成功",data:obj      ---obj  表示具体返回值
        }
    status为返回状态:1200成功,2500系统错误,1500业务错误,1403权限不足,1413参数校验错误  
3、json api快速开发 
    添加spring bean(在类上面标注@service/@component)并继承com.qsyout.sdk.declare.BaseService,bean命名必须以Service结尾;   
    2、接口注册:在resources/receives下根据url路径添加xml文件,例如:   
            url:/sys/menu/loadMenuData.do  --->  LoadMenuDataService  
   
4、xml校验框架的使用   
    在resources/receives定义参数结构,例如:   
    resources/receives/sys/menu/loadMenuData.xml
```
```
    根据dtd可以自动提示参数节点;  
    继承BaseService的spring bean--->LoadMenuDataService在执行前,自行按照xml定义的节点内容进行校验,标注JsonResult注解的RequestMapping方法,在其方法的Map参数上标注XmlValid并配置xml路径,亦可进行参数校验。  
5、持久化操作  
    mybatis的xml文件直接定义在resources/sqlmap下,例如:   
     
    统一调用IbatisDao的相关方法即可完成数据库操作:  
        ibatisDao.update(String statementName, Object params)    数据操纵语言DML(新增/编辑/删除)     
        ibatisDao.load(String statementName, Object params)    数据查询语言DQL(查询结果仅仅一条,大于一条报错)     
        ibatisDao.queryForList(String statementName, Object params)    数据查询语言DQL(查询结果大于等于一条)     
        statementName:TABLE_NAME.insert    params:mybatis参数(parameterType)    
    继承BaseService的spring bean中可直接使用属性ibatisDao,其他spring bean中需要注入IbatisDao后使用;     
    必要时在相应方法上添加@Transactional即可进行事务管理;     
6、异常处理  
    不同的应用场景抛出不同的异常,便于程序对异常进行统一管理:  
        业务异常:com.qsyout.sdk.ex.BusinessException,在也业务方法中抛出,用于当***不满足业务条件时提醒用户消息;     
        参数校验异常:com.qsyout.sdk.ex.ParamsValidateException,很少调用,框架一般会进入业务方法前校验参数,当参数不符合条件时,抛出该异常,当一些特殊场景需要按照条件校验参数时用到;    
        com.qsyout.sdk.ex.ForbiddenException,很少调用,框架一般在验证权限时调用;  
    上述异常的响应状态码分别对应jsonresult的status码:1500、1413、1403  
7、工具类介绍 
    DateUtil        时间相关的工具类  
    EncryptUtil     加密工具类(md5)  
    JSEscapeUtils   java模拟js的escape和unescape函数  
    MailUtil        发送邮件工具类  
    SpringUtil      spring获取bean工具类  
    StringUtil      字符串工具类   
    SubjectUtil     当前请求工具类封装  
    WebUtil         web相关的工具类  
8、视图开发  
    所有的视图页面均存放于resources/views目录下;  
    框架使用beetl进行视图渲染,视图开发的语法遵从beetl相关规范;   
    系统首页指向/index.html页面,该页面默认无任何内容仅做跳转,当已登录后跳转至后台管理页面反之跳转登录页面,若业务逻辑不符合要求,可在对应路径下重写/index.html页面;  
    
    系统登录页面指向/login.html,若登录页面不符合业务需要,可重写/login.html页面风格并在该页面中添加如下代码即可:  
```
    <% include("/system/login-form.html",{}){} %>
```   
    上述代码中包含了用户名、密码、验证码、忘记密码等相关功能逻辑和校验,仅需将登录组件嵌入到自定义UI界面即可;   
后台管理系统的左侧菜单系统设置和工作台之间预留了自定义导航菜单的位置,按照element-ui的【NavMenu 导航菜单】语法重写/business-nav-menu.html页面即可完成自定义导航菜单的嵌入。    
内置自定义beetl函数hasPermission('permission1','permission2'……)表示是否包含了permission1或者permission2权限标识中的一个,函数返回true或者false。
#### 技术支持
技术交流群QQ:1009166083,有任何问题或者技术咨询可发送邮件到2375276632@qq.com。  
#### 黑名单
#### 服务声明
开发不易,做一名纯粹的技术工作者更是不易,尊重他人劳动成果既是尊重自己,期望得到大家的认可和支持。  
任何组织和个人均可免费使用,凡是不尊重技术工作者的企业和个人将被列入黑名单并且失去免费使用的权利。  
本版本仅按照最基础的权限模型进行设计,后续会进行补全;  
其他权限模型的版本web-rbac0-dac,web-rbac1……以及更加复杂的权限模型基础框架持续更新中。