企业管理系统可视化权限功能设计
信息系统的开发,权限是绕不过的部分,一个优秀的企业系统必然需要搭配合理的权限管理,以保证业务的顺利进行。
所谓权限管理,一般是根据系统设置的安全规则或者安全策略,使用户在整个系统资源下只能访问自己被授权的资源,这样可以在保证数据安全的同时提高系统的使用效率。
常用权限--数据
企业一些重要的资料,比如财务数据,并不需要让员工知晓,这个时候就需要使用“数据权限”给员工授权,授权之后,相关数据就可以只给特定的员工查看。
常用权限--功能
和数据权限同样的道理,不同岗位的员工需要不同的功能权限,比如给张三赋予一个“销售经理”的角色,这个角色具有查询、添加、修改、删除销售部门员工的权利。那么张三就能够进入系统,进行此类的操作,若没有赋予这个角色,则没有这些权限。
权限示例
一般来说,权限系统会提供以下功能:
1.角色管理界面,由用户定义角色,给角色赋予权限;
2.用户角色管理界面,由用户给系统用户赋予角色。
一个很简单的例子,比如你开过个人淘宝店,系统上就有众多权限管理功能,比如给客服开通商品的上传、删除权限。
权限应尽可能详细,除了为主体授权,还应可以为部门、岗位、角色等授权。
例如,在角色管理界面我们能看到系统上相关角色的记录,管理员可以对角色进行增删改查,并为特定的角色赋权。
在“更多”这里,会出现各种需要授权的模块,访问过滤则为IP和时段控制。
当选择功能授权,进入下图界面,勾选需要授权的功能模块即可。
到这里,角色功能的授权就完成了。
当然,权限的使用通常要配合流程和表单等基础功能,这里不再演示,完整功能可搜索“learun”进行在线体验。
公司需要做一款产品,里面需要有一个平台用来类似手机APP似的房子不同的子产品入口(类快捷图标),各子产品间实现单点登录,创建不同账户级别,可以分配产品权限,产品资源权限,产品操作级权限。
本产品,最后权限做了双重控制,前后端都控制, 本文只从前端角度进行总结。
账户所拥有的产品权限信息,登录后后台将会返回数组形式,每项包含一些信息,至于这些产品信息管理,也在后台系统中进行统一管理配置,之后将会在资源权限提及。
其中,主要是url来进行跳转,这里有个问题:url里的路径有时是同一域名下的产品,也可以是一些以前的产品路径,这就需要进行url判断
当然,有人会问,如果直接进入一个产品地址,如何判断登录呢?
我们前后端约定好一个未登录code码 401
其实前端也将登录后的用户信息存入了localstorage, 退出登录后将会销毁,这也能进行登录验证,但是不是很准确;当然这里其实还得进行路由权限验证,这下面将会讲到。
路由权限设计有些考虑的问题:
后台系统资源管理设计
资源管理采用树形结构,同级叶子可以进行拖拽调换位置展示导航菜单,每级叶子均可以添加叶子,删除修改。叶子的信息这里有些特有的设计:
登录后,对显示菜单进行渲染后,要对访问的路由进行访问权限审核检查:
操作权限管理界面
操作权限主要是设计了一个webkey配置,方便前端的操作权限的检测。操作权限是进行统一管理的,路径资源管理下可以进行操作权限的勾选配置。
操作权限由于涉及到按钮级,也就是组件级,不能在每个页面单独配置,那样需求改动,将会陷入深坑。我采用的 HOC 高阶组件的封装套路:
界面中使用也是很简单:
这样采用HOC进行封装,可以进行一些别的需要扩展:加入操作动画,改变样式等。
不同的用户登录以后,对数据范围的权限是有限制的,那些能够访问,那些不能访问在产品设计的是就已经定义好,当访问一个当前登录用户无权访问的 API 或者数据的时候,API 响应中会返回对应的 code, 这个 code 是提前就前后的约定好的值。
这部分权限需要在 xhr api 层调用接口时进行数据权限的判断
总结一下,其实前端在做权限控制的时候,依赖于后端 API 返回的配置信息,所以在权限设计,路由设计,数据结构设计的时候,前后端一定要约定好。
你在左侧导航栏做三个菜单项,分别是:
1. 用户管理
2. 角色管理
3. 权限管理
其中 1 和 2 给管理员操作,管理员可以对其进行增删改查等操作;3 由软件开发者操作,不能分配给管理员;普通用户对 1、2、3 都无权操作。
权限管理界面,软件开发者可以对各种权限进行增删改查;
角色管理界面,管理员进去后可以对角色进行增册改查操作;具体可以这样安排界面,右栏主区分成上中下三块,上面这块提供添加及查询操作,中间块显示查询结果,下面这块查询结果中某条记录的明细。 增加按钮点击后,在明细区出现填写表单,具体需要填哪些内容由开发者定,一般角色名为必填项,然后同时在右边给出一个选择权限的列表,提供复选框让管理员为角色勾选分配权限;
用户管理界面跟角色界面类似,只是管理员在创建用户时是勾选角色而不是权限。
大体思路就是这样。
(PS: 数据库中当然要先设计好用户表、角色表、权限表、用户角色关联表、角色权限关联表等等)
本文以华为手机为例,在手机桌面上找到“设置”图标,点击它来打开手机设置界面。
在打开的“设置”界面,选择“全部设置”选项卡,然后在“隐私和安全”栏下方找到“权限管理”,点击打开“权限管理”界面。
在“权限管理”界面,默认显示是“权限”列表,在该列表中显示手机上所有权限名称,在权限名称右边标明拥有对应权限的手机应用程序数量。在这里,我们点击“应用程序”选项卡,打开“应用程序”列表。
在“应用程序”列表中,会显示手机上已经安装的全部手机应用,在本文中以大家使用最常用的“微信”软件为例,点击“微信”,打开“微信”权限管理。
在打开的“微信”权限管理界面,在“隐私数据”和“安全防御”两栏中会显示“微信”软件当前的权限设置,你可以在每行的权限右边进行该权限的设置操作,如果你非常信任该软件,可以勾选“信任此应用程序”。
如果你要批量处理权限操作,可以点击右上方图标,在弹出的列表中包括:“全部禁止”、“全部允许”和“全部提示”三项操作,选择你需要的操作进行设置即可。
首先介绍下思路:
1、用户表 user
2、角色表 role
3、菜单 menu
4、角色菜单权限表 role_menu
5、用户菜单权限表 user_menu
如图:
根据用户角色取出该角色所有权限,并对用户进行权限分配;注意菜单的按钮(新增、删除、修改)权限是放在中间表(user_menu)中的;
1、新增用户时,是要根据用户角色进行分配权限的 一定记得批量添加;批量、批量、批量,重要的事情说三遍,不要查询角色权限,然后for循环,这样效率太低了;
SQL如下:
INSERT INTO sys_user_menu(UserId, MenuId, DelPower, UpdPower, InsPower, ViewPower)
SELECt #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERe RoelId = #{roleId}
updPower 默认都是有的 所以都是1,这样根据角色查询出权限直接添加,响应时间大大提升;
2、修改用户角色也要记得重新分配用户权限哦!这个不能忘,可以用上面的方法;
业务方法:
如果角色没有修改,是不用重新分配权限的,所有userRole 重置为 null,如果角色修改则删除原权限,重新进行分配;
3、最后要优化的就是根据用户查询权限的时候啦,我最开始是这样做的,查询角色权限,用户权限,返回到前端,前端进行处理;结果就是很卡 基本上要三到四秒,
解决方案,一步到位;一个查询返回全部数据。
如下SQL:
SELECt menu.MenuId id, ParentId pid, MenuName text,
(SELECT COUNT(1) FROM sys_user_menu WHERe UserId = #{userId} AND MenuId = sm.MenuId) isShow,
(SELECt CONCAt(
(CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))
FROM sys_user_menu smenu WHERe smenu.UserId = #{userId}
AND smenu.MenuId = sm.MenuId) MenuInfo
FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId
WHERe RoelId = #{roleId}
首先根据 角色ID查询出权限,然后子查询用户是否有该权限,有返回1 木用返回 0;
最后按钮权限 我是直接拼接成字符串,分别对应 添加、删除、修改、查看 1 有该按钮 0 没有该按钮;
优化后 不管是添加、修改用户,加载用户权限都能控制在 1~2 秒;
是要找手机的权限管理位置吧,可以在手机设置里找到相关设置项。
1.首先打开手机的设置;
2.接着往下翻找到更多应用设置;
3.点击进入后可以看到手机安装的所有的应用情况,选择权限;
4.选择应用权限管理并点击进入;
5.就会显示手机安装的所有第三方应用所要求的权限情况;
6.选择右边的权限管理分页;
7.就可以看到手机各种可控制权限,点击某个权限后可以选择将该权限赋予哪些应用。
下面是一个java的web权限管理模块的应用与实现。
先介绍数据模型和应用界面,后继对实现细节做选择性阐述。
数据表关系如下:
该图标明了登陆用户、角色、部门(机构)、用户组、角色和模块功能之间的关系。为方便起见,所有表都只保留必要字段。
在本系统设计中,如下概念有着相对特殊的含义。
一、用户(user): 系统的使用者。
二、部门(org):体现了用户的行政关系,
三、组(group) :是某相同职能的用户的集合,可以和用户一样与角色产生关联。设置组的目的是为了方便用户的角色分配,减少用户与角色的直接对应关系。用户的角色可以是其组角色和其直接分配的角色之合集。限于作者的时间和精力,组功能在该系统中没有具体的实现。
四、角色(role):角色对应着某些功能(function)的集合,被分配一个角色意味着有权执行这些功能。角色表中的字段"functions"记录相关的功能id,id之间用逗号隔开。
五、功能(function):系统的一个或者多个执行准入。
vivo X7手机设置软件权限方法:进入i管家- 权限管理中,可以设置应用的权限(如:访问联系人、录音权限)。
具体操作步骤:
1、待机桌面进入i管家
2、权限管理
3、即可设置应用的权限
在“安全中心”界面出现的功能选项里面点击选择“授权管理”。
接着小伙伴会看到一个如图所示的“授权管理”的手机界面,我们在上面点击选择“应用权限管理”。
然后会打开一个如图所示的“应用权限管理”手机界面,我们在上面可以看到有一栏“权限管理”,它的下面可以看到“安全相关”的一个列表设置。我们可以在此栏对相应的软件进行一定的设置。
用手指滑动屏幕到下面,还可以看到一个“隐私相关”的列表设置。比如说现在我们在“隐私相关”下面点击打开“短信记录”一栏。
在打开的手机界面上,我们可以看到上面的软件都有权访问我们手机上的短信。我们可以认真考虑设置一下它们相关的权限。比如,像一个“天天爱消除”玩游戏的软件,似乎没有必要让它来访问我们的短信。此时,可以点击“天天爱消除”这一栏。
在弹出来的“短信记录”小窗口上,我们可以看到有三个选项:允许、提示、拒绝。我们现在不想让这个app软件访问我们的短信,那么,我们就在上面选择“拒绝”。
拒绝以后,我们可以在刚才的“短信记录”界面上看到它的右边打叉表示拒绝它的访问了。这样一来,它再也不行访问我们的短信了。我们的隐私保护就更加有保障了。