Bootstrap

系统如何实现权限控制

某个用户登录进去,能看到哪些菜单,能操作哪些按钮。#菜单树#

1,表

1.1)表设计

用户表-

select * from csms_user where user_name = 'plant02'
用户角色表-

select * from csms_user_role where user_id = 998 96
角色表-

select * from csms_role where id = 96
角色菜单表-

select * from csms_role_menu where role_id = 96
菜单表-

select * from csms_menu where id in(999999, 120000, 120100, 120101,120102,120103,120104,120200,120201,120300,120301)
菜单权限表-

select * from csms_menu_auth where menu_id in(999999, 120000, 120100, 120101,120102,120103,120104,120200,120201,120300,120301)
权限表-

select * from csms_auth where id in(988,987,986,985,989,984,983,982,981,980,979,967,966,965,962) 

1.2)关系:用户:角色:菜单:权限 1:n:n:n

1.3)表结构说明

1.3.1)菜单表,权限表,如下图,在此注意菜单跟权限直接关联,一个菜单对应多个权限(比如增,删,改,上报)

字段说明:

url:菜单表中权限url实际没用,用的是权限url,保存的接口路径

parent_id:父菜单ID,表面菜单是一个树形结构

type:0:菜单 1:按钮

3.2) 如果把菜单表,菜单权限表去掉,只保留 用户,角色,权限三者间关系。相当于菜单表和权限表合并,权限表结构如下图

2,用户,菜单,权限控制

2.1菜单结构

通过两个用户具有不同操作权限对比说明问题

用户1:主机厂用户

如下图,购车方案申请(查询,创建,修改,删除,上报);待审批方案(查询,撤销);已发布方案(查询,查看详情)的功能

用户二:沈明,审批方案

审批方案(审批),已发布方案(查询,查看详情)

2.2对比分析

通过对比主机厂用户和沈铭用户可以得出,不同之处在于,二级菜单购车方案申请(主机厂用户增删改查上报);待审批方案(主机厂只能撤销,沈铭可审批)

3, 数据分析如何实现

3.1 菜单,按钮实现

3.1.1 主机厂菜单,按钮

3.1.2 沈明菜单,按钮

对比可以看出沈铭用户没有审批上报菜单,具有审批方案按钮,无审批撤销按钮(主机厂相反)

3.2菜单,权限如何关联

如下图,菜单-待审批方案(120200)对应四种权限(981,982,983,984),(查询,撤销(主机厂),同意,反对(沈铭))

菜单权限表

3.3 权限

上面说明了,用户,菜单,按钮问题,解决了看得见的问题,而每个菜单或按钮都提供了一个接口,可以直接调用,那权限表有什么用?答案是:鉴权。否则每个用户拿到ur是否都可以调用任意接口,在zuul网关中,首先会根据用户获取所有权限,判断当前入参url,是否包含在权限内。

4,前端

用户登录进来,如何展示有能看到的菜单,按钮

java后台提供........................菜单树

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;