简介:
较原始的项目中使用的是JSP页面标签结合后台方法上注解配合实现权限控制,目前前后端完全分离开发已经是主流模式,大型的项目中可能会用到 shiro 或者 spring security 做安全校验,但是在小型项目中可以使用自定义注解达到权限控制的要求。
个人学习总结:
链接:【
springboot、springcloud、docker 等,学习目录
】
误区:
很多人认为权限控制就是控制不同用户在页面上拥有不同的功能(即不同的按钮),这是用户体验范围,这种情况下,只要知道后端地址,还是可以请求到后端数据的。权限控制做的是没有权限就不可以操作数据,即安全问题。
数据库表设计:
1、用户表user,存放不同的用户
2、角色表role,不同的角色(管理员、普通用户…)
3、用户角色表user_role,存放用户和角色之间的关系
4、权限表permission、存放不同的权限(用户的增删改查)
5、角色权限表role_permission,存放不同角色和权限之间的关系
省略:使用插件生成对应的实体类、mapper、mapper.xml。
对应表的维护
controller service层的建立
1、用户表、代码很简单的CRUD操作,省略。
2、角色表的维护。
/**
* @Auther: xf
* @Date: 2018/11/24 21:35
* @Description: 角色表的维护
*/
@RequestMapping(value = "role")
@RestController
public class RoleController {
@Autowired
private RoleService roleService;
@GetMapping(value={"list"})
public ApiResult list() {
List<Role> roleList = roleService.list();
return ApiResult.ok(roleList);
}
@PostMapping(value="save")
public ApiResult saver(@RequestBody Role role) {
int result = roleService.save(role);
return ApiResult.ok(result);
}
@GetMapping(value="get/{id}")
public ApiResult getUser(@PathVariable Integer id) {
Role role = roleService.get(id);
return ApiResult.ok(role);
}
@PutMapping(value="update")
public ApiResult putUser(@RequestBody Role role) {
int result = roleService.update(role);
return ApiResult.ok(result);
}
@DeleteMapping(value="delete/{id}")
public ApiResult delete(@PathVariable Integer id) {
int result = roleService.delete(id);
return ApiResult.ok(result);
}
}
3、权限表,这张表的维护很多项目都是开发人员直接维护,不暴露给用户。
4、用户角色表维护,CRUD,代码省略。
5、权限角色表维护