通用权限的一些整理思考
通用权限是一个比较古老的话题,从有软件系统开始,就有权限管理,但是真正要实现一个通用的细粒度、高可用、高扩展性的完整权限管理系统,并不是一件简单的事情。
本文只是一个引子,文字不多,但要真正理解还是需要仔细琢磨,需要的不妨Mark,在真正做权限的时候,思考得比较详细的时候再反过来看看,也许会有一些收获。
先上图,图比较大,请放大后查看。(右击图片,在新标签页中查看,点击放大图标,查看原始图)
再上数据字典,基本上考虑了上图的所有权限设计点,具体如何在数据库设计中体现,请自行思考,后续整个系统开发完成后,有精力时再重新完整梳理一遍。
以下数据字典由软件pdmreader(可从http://www.pdmreader.com/下载)从PDM转换,转换过程字段名被全部自动转换为了大写,单不影响理解。
信息 |
|
项目名称 |
通用权限管理 |
数据库类型 |
Sqlserver 2012 |
表数量 |
10 |
更新日期 |
2017年10月21日 |
数据表清单:
表名 |
解释 |
数据项(DataItem) |
|
雇员信息(EmpInfo) |
|
图标项(IconItem) |
|
模块页面项(ModulePage) |
|
组织机构(OrgInfo) |
|
权限项(RightItem) |
|
权限映射(RightMap) |
|
角色信息(RoleInfo) |
|
系统项(SystemItem) |
|
用户信息(UserInfo) |
表名:DATAITEM
解释:数据项(DataItem)
备注: 数据项
数据行、列 权限来自于DLL
数据项和系统没有直接关系,由Page关联
一个数据项可属于多个系统
数据权限筛选器
比如:我添加的、自己部门的、
自己门店的、上一个月的、
张三和王五的
DATAITEM(数据项(DataItem)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
DATAKEY |
数据项标识 |
NVARCHAR(50) |
50 |
数据项标识 |
|||
DATANAME |
数据权限名称 |
NVARCHAR(50) |
50 |
数据权限名称 |
||||
DATAKIND |
数据类型 |
INT |
0 |
数据类型 ①列表②实体,当前只支持列表,以后可能会有其它类型 |
||||
RIGHTKIND |
权限类型 |
INT |
权限类型 ①行权限②列权限③单元格权限(单元格由RilterRules和OwnColumns共同决定) |
|||||
TARGETMODEL |
目标模型 |
NVARCHAR(1000) |
1000 |
'' |
目标模型 对应实体全名 |
|||
FILTERRULES |
权限过滤规则 |
NVARCHAR(1000) |
1000 |
'' |
权限过滤规则 序列化后的FilterRule树,在业务层实现反序列化、上下文替换、注入过滤、SQL集成 |
|||
OWNCOLUMNS |
拥有的列 |
NVARCHAR(1000) |
1000 |
是 |
拥有的列 |
|||
OWNRIGHTS |
拥有的操作 |
NVARCHAR(1000) |
1000 |
'' |
拥有的操作 对应到有权限的行上能进行哪些操作,比如一个页面可查看的和可修改的可以分开定义数据权限 |
|||
SORTCODE |
排序码 |
INT |
0 |
排序码 |
||||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 当前只有在用状态 |
表名:EMPINFO 解释:雇员信息(EmpInfo)
备注: 雇员信息
EMPINFO(雇员信息(EmpInfo)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
EMPKEY |
雇员主键 |
NVARCHAR(50) |
50 |
雇员主键 |
|||
EMPKIND |
雇员类型 |
INT |
雇员类型 正式员工、试用员工、外聘人员、实习人员等 |
|||||
ORGKEY |
所属机构 |
NVARCHAR(50) |
50 |
所属机构 |
||||
JOINTIME |
入职时间 |
DATETIME |
入职时间 |
|||||
JOBLEVEL |
职级 |
NVARCHAR(50) |
50 |
'' |
职级 初级、中级、高级 |
|||
JOBPOSITION |
职位 |
NVARCHAR(50) |
50 |
-1 |
职位 软件工程师、设计师、安装工、生产工人 |
|||
JOBTITLE |
职称 |
NVARCHAR(50) |
50 |
'' |
职称 职称=职级+职位,比如高级软件工程师、高级设计师等 |
|||
JOBWORKS |
工作 |
NVARCHAR(1000) |
1000 |
'' |
工作 App开发、后端开发、UI设计、橱柜安装、衣柜安装、开料、包装 |
|||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
'' |
标签 余料字段 |
|||
TENANTID |
租户Id |
INT |
租户Id |
|||||
STATES |
状态 |
INT |
0 |
状态 |
表名:ICONITEM 解释:图标项(IconItem)
备注: 图标项
ICONITEM(图标项(IconItem)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
ICONKEY |
图标键 |
NVARCHAR(50) |
50 |
图标键 |
|||
ICONNAME |
图标名称 |
NVARCHAR(100) |
100 |
图标名称 |
||||
ICONKIND |
图标类型 |
INT |
图标类型 1流、2文件、3字体 |
|||||
ICONFILEKIND |
文件类型 |
INT |
文件类型 1字体、2svg、3ico、4png、5jpg、6gif |
|||||
ICONCONTENT |
图标二进制内容 |
IMAGE |
图标二进制内容 |
|||||
ICONURL |
文件路径 |
NVARCHAR(1000) |
1000 |
文件路径 |
||||
ICONFONT |
字体名称 |
NVARCHAR(50) |
50 |
字体名称 |
||||
ICONLENGTH |
长度 |
INT |
0 |
长度 |
||||
ICONWIDTH |
宽度 |
INT |
0 |
宽度 |
||||
USEKIND |
使用类型 |
INT |
使用类型 1任务单图标、2菜单图标、3按钮图标 |
|||||
GROUPIC |
分组标识 |
NVARCHAR(50) |
50 |
'' |
分组标识 默认无分组,则空 |
|||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
'' |
标签 |
|||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
SORTCODE |
排序码 |
INT |
0 |
排序码 |
||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 在用、停用、移除 |
表名:MODULEPAGE 解释:模块页面项(ModulePage)
备注: 模块页面项
Marks:
相当于给页面附加一系列包含标记或排除标记
辅助数据权限和操作权限验证
可以理解为系统结构
System
Modules
Groups
Menu1---Rights、Datas、Marks
Menu2---Rights、Datas、Marks
……
MODULEPAGE(模块页面项(ModulePage)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
ITEMKEY |
项主键 |
NVARCHAR(50) |
50 |
项主键 |
|||
ITEMKIND |
项类型 |
INT |
项类型 1子系统、2模块、3组、4web菜单、5win菜单…… |
|||||
ITEMNAME |
项名称 |
NVARCHAR(50) |
50 |
项名称 |
||||
ITEMCODE |
项编码 |
NVARCHAR(50) |
50 |
项编码 |
||||
ITEMPATH |
项路径 |
NVARCHAR(1000) |
1000 |
'' |
项路径 |
|||
ITEMICON |
项图标 |
NVARCHAR(100) |
100 |
'' |
项图标 |
|||
ISMENU |
是否是菜单 |
BIT |
0 |
是否是菜单 |
||||
SYSTEMKEY |
所属子系统 |
NVARCHAR(50) |
50 |
所属子系统 |
||||
MODULEKEY |
模块主键 |
NVARCHAR(50) |
50 |
'' |
模块主键 |
|||
PARENTKEY |
上级主键 |
NVARCHAR(50) |
50 |
0 |
上级主键 |
|||
CHILDKEYS |
所有直属子级标识 |
NVARCHAR(MAX) |
'' |
所有直属子级标识 排序使用,逗号分隔的字符串列表 |
||||
PARENTKEYS |
所有父级标识 |
NVARCHAR(MAX) |
'' |
所有父级标识 路径码替代字段,逗号分隔的字符串列表 |
||||
RIGHTS |
页面所有操作权限 |
NVARCHAR(1000) |
1000 |
'' |
页面所有操作权限 |
|||
DATAS |
页面所有数据权限 |
NVARCHAR(1000) |
1000 |
'' |
页面所有数据权限 |
|||
MARKS |
页面所有权限标记 |
NVARCHAR(1000) |
1000 |
页面所有权限标记 权限标记实体在逻辑层定义,包含Key、Name、Remark |
||||
CONFIGVALUE |
配置值 |
NVARCHAR(MAX) |
'' |
配置值 菜单上的配置信息 |
||||
CONFIGTARGET |
配置目标实体 |
NVARCHAR(1000) |
1000 |
'' |
配置目标实体 |
|||
CONFIGFORM |
配置窗体 |
NVARCHAR(50) |
50 |
'' |
配置窗体 存储ConfigTaget实体对应的编辑窗体PresentCode |
|||
CONFIGPARSER |
配置解析器 |
NVARCHAR(50) |
50 |
'' |
配置解析器 |
|||
ARGS |
参数 |
NVARCHAR(1000) |
1000 |
'' |
参数 Action菜单,传递给Action的参数列表 |
|||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
'' |
标签 预留 |
|||
SORTCODE |
排序码 |
INT |
0 |
排序码 上移下移支持 |
||||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 |
表名:ORGINFO 解释:组织机构(OrgInfo)
备注: 组织机构
ORGINFO(组织机构(OrgInfo)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
ORGKEY |
机构主键 |
NVARCHAR(50) |
50 |
机构主键 |
|||
ORGKIND |
机构类型 |
INT |
0 总公司 |
机构类型 公司、部门:0_总公司、1_子公司、2_直营店、3_经销商、4_分工厂、5__供应商、6_合作伙伴 |
||||
ORGNAME |
机构名称 |
NVARCHAR(50) |
50 |
机构名称 |
||||
ORGCODE |
机构编码 |
NVARCHAR(50) |
50 |
'' |
机构编码 |
|||
PARENTKEY |
直属父级机构 |
NVARCHAR(50) |
50 |
-1 |
直属父级机构 |
|||
PARENTKEYS |
所有父级机构 |
NVARCHAR(MAX) |
'' |
所有父级机构 便于权限验证,查看所有下级部门的数据 |
||||
DIRECTCORPIC |
直属公司 |
NVARCHAR(50) |
50 |
直属公司 比如直营店下的员工,只能查看直营店的数据 |
||||
SORTCODE |
排序码 |
INT |
0 |
排序码 当前只支持上移下移,拖动支持依赖于外部顺序存储,不适用此字段 |
||||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
'' |
标签 预留 |
|||
TENANTID |
租户Id |
INT |
租户Id |
|||||
STATES |
状态 |
INT |
0 |
状态 |
表名:RIGHTITEM 解释:权限项(RightItem)
备注: 权限项
权限项中存储系统中所有出现过的权限,
ModulePage、DataItem添加时进行选择
RIGHTITEM(权限项(RightItem)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
RIGHTKEY |
权限主键 |
NVARCHAR(50) |
50 |
权限主键 |
|||
RIGHTCODE |
权限码 |
NVARCHAR(50) |
50 |
权限码 |
||||
RIGHTNAME |
权限名 |
NVARCHAR(50) |
50 |
权限名 |
||||
ICONIMAGE |
图片图标 |
NVARCHAR(50) |
50 |
图片图标 对应文件标识 |
||||
ICONFONT |
字体图标 |
NVARCHAR(50) |
50 |
'' |
字体图标 对应字体样式 |
|||
SORTCODE |
排序码 |
INT |
0 |
排序码 |
||||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 当前只有 在用状态 |
表名:RIGHTMAP 解释:权限映射(RightMap)
备注: 权限映射
一个人员可以有多个用户:
人员?用户(UserInfo外键关联Employee)
主权限都通过用户角色进行管理,包含:
用户?角色、角色?系统、角色?菜单(菜单包含权限/数据/标记)
用户直接权限:
用户单独附加或排除权限,
用户?系统、用户?菜单(菜单包含权限/数据/标记)
RIGHTMAP(权限映射(RightMap)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
MAPKEY |
映射标识 |
NVARCHAR(50) |
50 |
映射标识 |
|||
MAPNAME |
名称 |
NVARCHAR(50) |
50 |
名称 |
||||
SOURCEKIND |
源类型 |
INT |
1 用户 |
源类型 1 _用户、2_角色 |
||||
SOURCEKEY |
源标识 |
NVARCHAR(50) |
50 |
源标识 用户主键 or 角色主键 |
||||
TARGETKIND |
目标类型 |
INT |
1 系统 |
目标类型 1_系统、2_模块/菜单/操作/数据/标记 |
||||
TARGETKEY |
目标标识 |
NVARCHAR(50) |
50 |
目标标识 系统主键 or 菜单主键 |
||||
OPERATERIGHTS |
拥有的操作权限 |
NVARCHAR(1000) |
1000 |
'' |
拥有的操作权限 隶属操作权限.Enable,对应RightItem表 |
|||
VISIBLERIGHTS |
拥有的可见权限 |
NVARCHAR(1000) |
1000 |
'' |
拥有的可见权限 隶属操作权限.Visible,对应RightItem表 |
|||
DATARIGHTS |
拥有的数据权限 |
NVARCHAR(1000) |
1000 |
'' |
拥有的数据权限 对应DataItem表 |
|||
MARKRIGHTS |
拥有的标记权限 |
NVARCHAR(1000) |
1000 |
'' |
拥有的标记权限 |
|||
TAGS |
标签分组 |
NVARCHAR(1000) |
1000 |
'' |
标签分组 对应未域枚举,用于Dashboard、数据聚合界面,聚合权限 |
|||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 暂时只有 在用 状态 |
表名:ROLEINFO 解释:角色信息(RoleInfo)
备注: 角色信息
ROLEINFO(角色信息(RoleInfo)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
ROLEKEY |
角色主键 |
NVARCHAR(50) |
50 |
角色主键 |
|||
ROLEKIND |
角色类型 |
INT |
角色类型 ①全局角色②自定义角色 |
|||||
ROLENAME |
角色名称 |
NVARCHAR(200) |
200 |
角色名称 |
||||
SYSTEMKEY |
系统标识 |
NVARCHAR(50) |
50 |
系统标识 |
||||
CORPKEY |
企业标识 |
NVARCHAR(50) |
50 |
企业标识 |
||||
PARENTKEY |
父级角色 |
NVARCHAR(50) |
50 |
'' |
父级角色 |
|||
ISSUPER |
是否超级管理员 |
BIT |
0 |
是否超级管理员 |
||||
ALLOWS |
允许行为 |
INT |
1 |
允许行为 位域枚举,当前支持1修改2删除 |
||||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
1 |
标签 预留字段 |
|||
SORTCODE |
排序码 |
INT |
0 |
排序码 |
||||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 |
表名:SYSTEMITEM 解释:系统项(SystemItem)
备注: 系统项
SYSTEMITEM(系统项(SystemItem)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
SYSTEMKEY |
系统主键 |
NVARCHAR(50) |
50 |
系统主键 |
|||
SYSTEMKIND |
类型 |
INT |
类型 1 _Windows桌面程序、2_Web程序、3_App程序、4_WinService、5_微信程序 |
|||||
SYSTEMNAME |
名称 |
NVARCHAR(50) |
50 |
名称 |
||||
ISFRONTEND |
是否前端系统 |
BIT |
0 |
是否前端系统 用户直接使用的系统 |
||||
NEEDLOGIN |
是否需要登录 |
BIT |
0 |
是否需要登录 不需要登录的系统,相当于任何人都可以使用,不需要系统令牌单点登录验证 |
||||
SYSTEMTOKEN |
系统令牌 |
NVARCHAR(1000) |
1000 |
'' |
系统令牌 |
|||
SYSTEMICON |
系统图标 |
NVARCHAR(100) |
100 |
'' |
系统图标 |
|||
DISPLAYS |
显示范围 |
INT |
0 所有 |
0 |
显示范围 显示在:1_权限设置、2_入口程序 |
|||
TERMINALS |
支持终端 |
INT |
0 |
支持终端 支持windows pc、android、iphone、web浏览器、移动浏览器等 |
||||
FUNCTIONS |
支持功能 |
INT |
0 |
支持功能 系统支持功能:1_SingleSignOn、2_AutoUpdate |
||||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
'' |
标签 预留 |
|||
EXTRAS |
额外信息 |
NVARCHAR(MAX) |
'' |
额外信息 存储系统额外配置信息 |
||||
SORTCODE |
排序码 |
INT |
0 |
排序码 当前支持上移、下移,不支持拖动排序 |
||||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 |
||||
STATES |
状态 |
INT |
0 |
状态 |
表名:USERINFO 解释:用户信息(UserInfo)
备注: 用户信息
USERINFO(用户信息(UserInfo)) |
||||||||
是否主键 |
字段名 |
字段描述 |
数据类型 |
长度 |
可空 |
约束 |
缺省值 |
备注 |
是 |
USERKEY |
用户主键 |
NVARCHAR(50) |
50 |
用户主键 |
|||
USERKIND |
类型 |
INT |
类型 备用字段 |
|||||
USERNAME |
用户名 |
NVARCHAR(50) |
50 |
用户名 |
||||
NICKNAME |
昵称 |
NVARCHAR(50) |
50 |
昵称 |
||||
USERAVATAR |
头像 |
NVARCHAR(50) |
50 |
'' |
头像 存储头像对应的文件主键 |
|||
PHONE |
手机号 |
NVARCHAR(20) |
20 |
手机号 用于短信下发 |
||||
|
电子邮件 |
NVARCHAR(50) |
50 |
电子邮件 用于密码找回 |
||||
PASSWORDS |
加密后密码 |
NVARCHAR(1024) |
1024 |
加密后密码 |
||||
PASSWORDSALT |
加密盐渍 |
NVARCHAR(128) |
128 |
加密盐渍 |
||||
PASSWORDWAY |
加密方式 |
INT |
'' |
加密方式 不加密、MD5、DES等 |
||||
ALLOWLOGIN |
是否允许登录 |
BIT |
1 |
是否允许登录 |
||||
REFUSELOGINREASON |
拒绝登录原因 |
NVARCHAR(1000) |
1000 |
'' |
拒绝登录原因 |
|||
ISSUPER |
是否超级管理员 |
BIT |
0 |
是否超级管理员 |
||||
EMPKEY |
雇员主键 |
INT |
雇员主键 |
|||||
SESSIONTOKEN |
Session令牌 |
NVARCHAR(1000) |
1000 |
'' |
Session令牌 |
|||
LASTLOGINTIME |
最后登录时间 |
DATETIME |
getdate() |
最后登录时间 |
||||
LASTLOGINIP |
最后登录Ip |
NVARCHAR(50) |
50 |
'' |
最后登录Ip |
|||
LASTLOGINTERMINAL |
最后登录终端 |
NVARCHAR(50) |
50 |
'' |
最后登录终端 |
|||
LASTLOGINTICKET |
最后登录票据 |
NVARCHAR(1000) |
1000 |
'' |
最后登录票据 |
|||
PROFILES |
个性化配置 |
NVARCHAR(MAX) |
'' |
个性化配置 存储用户个性化配置 |
||||
TAGS |
标签 |
NVARCHAR(1000) |
1000 |
'' |
标签 备用字段 |
|||
TENANTID |
租户Id |
INT |
租户Id |
|||||
CREATETIME |
创建日期 |
DATETIME |
getdate() |
创建日期 |
||||
CREATEUSERID |
创建用户 |
INT |
创建用户 |
|||||
MODIFYTIME |
修改日期 |
DATETIME |
getdate() |
修改日期 |
||||
MODIFYUSERID |
修改用户 |
INT |
修改用户 |
|||||
REMARK |
备注 |
NVARCHAR(MAX) |
'' |
备注 用户排序依赖于Employee外部 |
||||
STATES |
状态 |
INT |
0 |
状态 在用,禁用,删除,禁止登陆 |
本文为作者原创,转载请注明出处。