这章,我们设计一个简单的用户角色权限的关系,即我们常说的RBAC(Role-Based Access Control,基于角色的访问控制)。用户和角色是多对多的关系,因为一个用户可以属于多个角色,一个角色也可以包含多个用户,同样角色和权限也是多对多的关系,一般角色我们可以是一个树形结构,如角色A可以有子角色A1,A2,这里我们暂时简单处理,让角色是一个平级结构。
1、建立实体
权限实体
角色实体
这里用到了两个新的注解,这是JPA提供的注解,ManyToMany,顾名思义,就是多对多,相对应的还有OneToOne,一对一,ManyToOne,多对一,OneToMany,一对多。开头,我们分析了,用户和角色,角色和权限都是多对多的关系。CascadeType是级联操作,这里我们采用的是REFRESH,即刷新,角色的修改,并不会影响权限数据的变化。FetchType.LAZY,延迟加载,我们在查询Role时,如果不去获取perms属性,JPA并不会主动去查询perms数据,相反的,如果是FetchType.EAGER,每次查询Role,都会去关联查询perms数据。
有数据库基础的人都知道,多对多的关系,一般我们需要一个中间表,这里JoinTable就是定义这个中间表的,这里定义了表名,Role主键对应的字段名,Perm主键对应的字段名。
用户实体
2、添加Repository
3、添加Controller
UserController,我们将PostController复制一份,进行修改,改完后的代码如下所示
上面的代码,基本上就包括了我们User实体的增删改查后台服务。同样的,我们将RoleController,和PermController都加上,这里就不贴出来了。
4、验证表结构
现在我们重启系统,因为我们设置了JPA执行DDL语句,JPA将会自动创建表,我们来看下表结构是不是我们期望的那样。
可以看到,表结构正如我们设置的那样创建成功了。
5、总结
这章我们主要分析了用户角色权限三者的关系,建立了他们实体间的联系,将底层的增删改查方法都先写好了,后面我们将完成这三者数据的创建及关联。
对于JPA实体关系的几个注解,OneToOne,OneToMany,ManyToMany,ManyToOne,笔者将通过实例介绍,如果有不清楚的地方,请大家参考网上其他更详细的介绍。如果对于ManyToMany了解清楚了,就可以继续往下走。
代码:
https://github.com/www15119258/springboot-study/tree/branch19
网友评论