1.本质
用户权限管理的本质: 对用户能访问哪些后端接口的管理。
2.思考过程:
权限管理模块一般都包含这几个子模块:
权限管理
菜单管理
角色管理
用户管理
首先来解释一下这几个模块的大概内容和作用:
权限管理
就是一个包含系统中所有的后端接口的一个列表。因为用户权限管理的本质就是用户能访问哪些接口,所以权限管理模块,就是接口列表,一般都是查看,没有什么增加、编辑的功能。
菜单管理
包含了系统中所有的一级、二级、三级...的菜单列表(路由菜单)。其实就是把接口按照系统的菜单进行分类。因为不同用户拥有不同权限的区别通常就是能看到不同的菜单。所有将权限接口按照菜单进行分类管理。
具体内容就是一个菜单列表,菜单下面包含很多接口。可以在菜单下面对接口增删改查。(并且菜单本身也是可以管理的,这个下文再说)
角色管理
如果直接给用户分配能访问的菜单,那就有点麻烦,因为菜单有很多个,用户一般都会有访问多个菜单的权限。
所以,我们一般不会将用户 和 菜单进行直接关联。
所以就出现了 角色,我们将多个菜单进行角色分类。比如管理员、总经理、人事、开发部。这样一来,我们再给某个用户分配接口权限的时候,就方便多了,直接分配对应的角色,反正角色本质上还是对应某些接口。
用户管理
当然就是系统中注册的所有用户咯,可以给用户分配角色。
所以,整个权限管理的流程: 给菜单分配接口,给角色分配菜单,给用户分配角色。
接口 -> 菜单 -> 角色 -> 用户
当然,有些公司的后台管理系统,会有很多用户。这些用户在不同的部门,不同的小组,甚至是不同的子公司啥的。
这个时候,我们可以在角色的基础上,又进行分类。叫做 组织机构管理
如果这样的话,就直接给用户分配组织结构了,其实作用就是角色。只是分类,方便管理。
做到这一步,就能实现什么效果呢?管理员账号能访问所有接口的权限,就能给不同的用户分配权限。不同的用户登录进系统中,能看见所有的菜单(因为目前路由菜单本身还是前端写死的),只不过当进入某些菜单时,如果当前菜单中有些接口没有给当前用户的访问权限时,接口就会真的访问不了。就实现了用户能访问不同权限接口的管理功能了。
优化:当然,上文说到给角色分配菜单,目的不仅仅是用户能访问不同接口,并且还能实现用户能看到不同的菜单,给当前用户分配的哪些菜单,用户就只能看到哪些菜单。这就涉及到动态路由菜单了。
菜单本身一般包含名称、icon、路由路径、组件路径、meta元数据等等属性,这些都会在系统中(菜单管理模块)进行管理。假如我们要新增一个菜单,就需要考虑 该菜单包含哪些接口,然后把该菜单的属性通过后端接口传给后端保存。
既然将菜单进行管理了,那前端的菜单列表就是请求后端接口来的。前端路由映射,可以把所有路由都静态注册,也可以用动态路由,只注册当前用户能访问的菜单的路由(能访问哪些路由,这是后端接口给的,并且是前文说的在菜单管理中配置的数据)。
当然,在 接口 -> 菜单 -> 角色 -> 用户 这个过程中,也不一定要全部遵守。比如我们公司,就没有对菜单进行管理。最后用户打开某个模块页面时,里面的接口没有分配权限时,接口就直接在页面报个错就行了。但是这样对用户体验并不好。
总结:
反正记住一句话:后台管理系统的用户权限管理的本质: 对用户能访问哪些权限接口进行管理。
我知道大多数人跟我一样很笨,很垃圾。但我们不能摆烂,一定要多思考,多总结。要努力在这个社会中生存下来。因为生存下来本身就是生命的意义。