通用基础表逻辑设计(三)——功能权限

概述

        在一个应用系统中有多个用户,用户通常分为多种角色,每种角色的用户能够访问的页面、能够查看的数据或者能够执行的操作等各有不同,因此需要设计与实现应用系统的权限体系。通过对应用系统进行需求分析,由用例图可知功能需求,由E-R图可知数据需求,应用系统的权限就包括功能权限和数据权限。功能权限描述了一个用户或者一种角色能够访问哪些页面、能够执行哪些操作(按钮、链接等),数据权限描述了一个用户或者一种角色能够查看什么范围内的数据(水平范围内的记录)、能够查看数据的哪些属性(垂直范围内的字段)。本文仅讨论功能权限的设计与实现,从数据库层面尽量实现一种通用的功能权限体系。

        

部门、用户与角色

        在面向对象分析和设计中,通过用例图可以明确一个应该系统中有哪些用户、用户分哪些角色、用户属于哪个组织架构、各种用户或角色有哪些行为,通过E-R图来分析一个应用系统中的用户有哪些属性、用户与组织架构之间的关系、用户与角色之间的关系。1个用户属于1个部门,1个用户拥有1个或多个角色。用户属于哪个部门,则表示该用户只能查看与该部门关联的数据,这可以通过数据权限实现,也可以通过用户与部门之间的关联以及部门与其数据之间的关联推导出用户可查看哪些数据;用户拥有哪些角色,则表示该用户拥有这些角色赋予的权限。

图1:部门-用户-角色的E-R图

        部门、用户和角色各自包含哪些基本属性,则用以下表说明:

字段名称数据类型属性允许空默认值备注
u_idint(4)PK AI用户编号
u_guidchar(36)newid()用户GUID
d_guidvarchar(36)所在部门GUID

u_account

varchar(50)

用户账号

u_pwdchar(32)用户MD5密码
u_reg_timedatetime(8)getdate()用户注册时间
u_reg_ipvarchar(50)用户注册IP
u_last_timedatetime(8)用户上次登录时间
u_last_ipvarchar(50)用户上次登录IP
u_stateint(4)0用户状态(-1已删除,0锁定,1正常),只有正常状态才允许登录

表1:base_user用户表

字段名称数据类型属性允许空默认值备注
d_idint(4)PK AI部门编号
d_guidchar(36)newid()部门GUID

d_parent_guid

varchar(36)

上级部门GUID

d_namevarchar(50)部门名称
d_stateint(4)0部门状态(-1已删除,0已禁用,1已启用)

表2:base_department部门表

字段名称数据类型属性允许空默认值备注
r_idint(4)PK AI角色编号
r_guidchar(36)newid()角色GUID
r_namevarchar(50)角色名称
r_stateint(4)0角色状态(-1已删除,0已禁用,1已启用)

表3:base_role角色表

字段名称数据类型属性允许空默认值备注
ur_idint(4)PK AI关联编号
u_guidchar(36)用户GUID
r_guidchar(36)角色GUID
ur_stateint(4)0关联状态(-1已删除,0已禁用,1已启用)

表4:map_user_role用户与角色关联表

模块、操作与权限

        通过模块化设计一个应用系统,可以将系统划分为若干模块(Module:一个模块可以是一个页面、可以是一个控制器等等),每个模块包含各自的操作(Operation:一个操作可以是访问一个页面、可以是点击一个链接、可以是点击一个按钮、可以是点击一个菜单等等),一个模块的一个操作可以定义为最小粒度的权限(Power)。无论是通过点击链接或是按钮,都可以最终指向一个模块的一个操作。所有模块的通用操作我觉得基本上如下表所示:

操作编码操作名称操作说明
Add新增添加数据
Delete删除删除数据
Update修改编辑数据
List列表查询数据列表或访问列表页面
Get详情查询数据详情或访问详情页面
Import导入导入数据
Export导出导出数据
Pass审核审核或取消审核
Top推荐推荐或取消推荐

表5:操作列表

image.png

图2:模块-操作-权限E-R图

字段名称数据类型属性允许空默认值备注
m_idint(4)PK AI模块编号
m_guidchar(36)newid()模块GUID
m_parent_guidvarchar(36)上级模块GUID
m_namevarchar(50)模块名称
m_stateint(4)0模块状态(-1已删除,0已禁用,1已启用)

表6:base_module模块表

字段名称数据类型属性允许空默认值备注
op_idint(4)PK AI操作编号
op_guidchar(36)newid()操作GUID
op_namevarchar(50)操作名称
op_stateint(4)0操作状态(-1已删除,0已禁用,1已启用)

表7:base_operation操作表

字段名称数据类型属性允许空默认值备注
p_idint(4)PK AI权限编号
p_guidchar(36)newid()权限GUID
m_guidchar(36)模块GUID
op_guidchar(36)操作GUID
p_namevarchar(50)权限名称
p_loginint(4)1是否登录(1要求登录,0无需登录)
p_validateint(4)1是否验证(1验证权限,0开放权限)
p_stateint(4)0权限状态(-1已删除,0已禁用,1已启用)

表8:base_power权限表

用户、角色与权限

        为各角色分配权限,则属于该角色的所有用户都将拥有这些权限。若一个用户还拥有所属角色之外的特殊权限,也可以单独为该用户分配权限,但为了统一规范权限体系,建议为这些特殊权限新建一个角色。一个用户的权限是其所属的所有角色的权限并集。

image.png

图3:角色-权限E-R图

字段名称数据类型属性允许空默认值备注
rp_idint(4)PK AI关联编号
r_guidchar(36)角色GUID
p_guidchar(36)权限GUID
rp_stateint(4)0关联状态(-1已删除,0已禁用,1已启用)

表9:map_role_power角色与权限关联表


 

综述

        配置部门->配置角色->分配权限->添加用户并设置所在部门和所属角色。在前后端分离项目中,一个业务接口为一个操作,一类接口为一个模块,比如ASP.NET MVC WebApi中,使用控制器名作为模块编码,使用方法名为操作编码。

image.png

图4:综合E-R图

image.png

图5:程序流程图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值