生产权限设计

2022-01-12  本文已影响0人  放开那个BUG

1、前言

通常我们说权限设计,都会立马想到:用户-角色-权限模型,虽然这个看起来很清晰,但是往往在权限这块没法操作,因为没法细分。 我理解的权限分为菜单权限和数据权限。菜单权限就是上面的模型中的权限,而数据权限其实是直接跟用户绑定的。那么怎么设计一个 用户-角色-权限模型呢?

2、设计

我们需要这几个表,user、role、permission(或者也可以叫 menu,因为实际上这个是菜单权限),然后他们的连接表 user_role,role_permisson。user、role 比较简单,重点说 permission。

permission 分为两种,一种是 menu、button 两种,menu 表示一级菜单,二级菜单等,button 表示按钮。至于接口上的权限怎么弄,就是先抽象化成一个权限,比如商品插入:goods_add,在权限表插入这条数据。那么在代码中可以定义一个注解,注解上标识了 goods_add 权限,如图:


权限设计

然后在拦截器中判断一下,如果这个接口需要校验,那么查出这个用户所有的权限,再对比下有没有这个接口的权限,没有则拦截;有则放行。

那么数据表是怎样的呢?

主要字段是 id、code、name、parentId 和 type。id 和 parentId 主要组成一棵树,code 标识权限如:goods_add,name 标识相应的按钮名称还是菜单名称,type 表示是 menu 和 button。一个基本的数据是:

Id Code Name parentId type
1 Home 首页 -1 menu
2 goods 我的商品 1 menu
3 goods_add 新增商品 2 button
4 goods_edit 修改商品 2 button

那么这上面的数据,在返回给前端时,就可以组成一个树返回,用户就可以在角色页面编辑这个角色所拥有的菜单权限是哪些。

保存时,传入勾选的哪些权限,permission 与 role 通过 role-permission 连接,只需要传入角色 id 以及对应的权限 id 即可,就知道哪些权限被勾选了。在查询的时候,除了所有的权限树之外,还会把所勾选的权限数据返回,让前端去渲染勾选的树。(这东西后端可以合成一步)

3、结论

我看到一个详细版本的,跟我的思路设计是一样的:http://www.justdojava.com/2020/06/30/springboot-menu-auth/

上一篇下一篇

猜你喜欢

热点阅读