基于Newlife.XCode的权限系统(含数据集权限)【设计篇】
2012-06-26 20:24
661 查看
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html
Newlife XCode组件相关文章目录:http://www.cnblogs.com/asxinyu/p/4329747.html
权限管理在一个系统的开发中必不可少的部分,说重要也很重要,说不重要当然也没多少人重视。说有技术含量,但也还真有点技术含量,比如博客园吉日大哥的权限系统,我也用过,不得不佩服。当然很多人也认为没什么技术含量,自己的系统中也都有这么个东西,也都能满足实际需求。
我不是专门搞开发的,所以有些东西可能偏离时间的轨道。请谅解。一直对权限系统比较感兴趣,也一直想打造一个属于自己的权限管理组件,能随心所欲的进行权限控制。我的目标是“除了普通的访问控制权限之外,还要对每个表每条记录的每个字段进行授权控制,另外要足够小和简单”不说废话了,先看数据库表结构设计,然后讲解思路:
1.权限管理的几个核心表是:用户表,角色表,权限表,用户角色表,用户权限表,角色权限表;
2.下面是数据库设计的初步版本,可能在必填和默认值上面还有些小错误,不过没关系,主要先看思路;
User: 用户表
Role: 角色表
Permission: 权限表
UserRole: 用户角色表
UserPermission: 用户权限表
RolePermission: 角色权限表 (RolePermission)
基本说明
1.用户表,角色表,用户角色表很简单,就不用介绍了,它们是多对多的关系。
2 用户权限和角色权限就是权限的分配了,如果用户及其角色具有某一个权限,则具有相应的访问权限。
3.权限表,这个是核心,我觉得我的简洁之处也就是在这里。着重介绍:
权限表是树形的,权限的根节点是以数据库名称来划分,权限是以数据库的数据表为单位的。
所以,权限表有一个字段名为DbTable,这个字段是的含义是“数据库名称+数据表名称”,作用是这样的:
绝大部分权限都是和数据库中某个表相关的,所以这里数据表是主要的权限单位
每个数据库的数据表系统默认6种数据权限:添加、删除、修改、查询、菜单、全局数据权限
也就是说每个数据表都有6个默认的子权限节点,该类型的权限节点是可以自定义的,比如新增一个
数据权限只能在数据表下的5种权限中添加,比如要给 删除添加 数据权限,则在当前表的 删除权限下添加子节点,同时打开父节点的数据权限开关。
当然你也可以自定义一个根节点,来自定义你的相关权限。
比如上面这张简单的示意图,是每个表都有的权限结构,数据权限只能在 增加,删除,修改,查询和全局数据权限5个地方定义,并且这5个权限,若要添加子节点,只能是数据权限。
1.全局数据权限是为了方便数据权限的定义而设置的,比如增删查改,如果都要对某一个字段进行限制,那么只需要在全局里面定义就可以了,没必要到每个增删查改权限中去添加。
2. 关于自定义权限,自定义权限也可以放在任何地方,只要方便你自己就行。比如可以将自定义权限放在表下面,如果有一个表 按钮,或者 菜单,你想添加权限控制,但又和增删查改不完全相干,那你可以在这里自定义一个权限。
3.若定义数据权限,则将约束条件放在Constraint中,然后将数据权限授予角色或者用户。
4.其实用户权限表某种时候是不必要的,用户是属于角色的,只要定义角色权限即可,但为了某些临时需求,临时赋予某些用户一些权限,所以增加了用户权限表。
本权限系统基于Newlife.Xcode,数据权限的实现,就是在对实体进行增删查改时进行条件过滤,目前已经完成40%的开发工作。最近搬家,7月份还要去上海培训,所以最近一段时间是没时间做了,今天在群里面看见有人讨论数据权限,所以就趁机把自己的思路写下来。可能比较混乱,希望大家在论坛或者群里面讨论。本文对于的论坛地址为:
基于Newlife.Xcode的权限系统 欢迎讨论
http://bbs.53wb.com/forum.php?mod=viewthread&tid=196&fromuid=28
Newlife.Xcode的资源:
Newlife XCode组件相关文章目录:http://www.cnblogs.com/asxinyu/p/4329747.html
权限管理在一个系统的开发中必不可少的部分,说重要也很重要,说不重要当然也没多少人重视。说有技术含量,但也还真有点技术含量,比如博客园吉日大哥的权限系统,我也用过,不得不佩服。当然很多人也认为没什么技术含量,自己的系统中也都有这么个东西,也都能满足实际需求。
我不是专门搞开发的,所以有些东西可能偏离时间的轨道。请谅解。一直对权限系统比较感兴趣,也一直想打造一个属于自己的权限管理组件,能随心所欲的进行权限控制。我的目标是“除了普通的访问控制权限之外,还要对每个表每条记录的每个字段进行授权控制,另外要足够小和简单”不说废话了,先看数据库表结构设计,然后讲解思路:
1.权限管理的几个核心表是:用户表,角色表,权限表,用户角色表,用户权限表,角色权限表;
2.下面是数据库设计的初步版本,可能在必填和默认值上面还有些小错误,不过没关系,主要先看思路;
User: 用户表
中文名 | 英文名 | 字段名 | 数据类型 | 大小 | 主键 | 唯一 | 必填 | 默认值 |
编号 | Id | Id | Int32 | 10 | 是 | 是 | 是 | |
用户名 | UserName | UserName | String | 30 | 是 | |||
密码 | Password | Password | String | 50 | 是 | |||
排序码 | SortCode | SortCode | Int32 | 10 | ||||
是否有效 | IsEnable | IsEnable | SByte | 3 | 1 |
中文名 | 英文名 | 字段名 | 数据类型 | 大小 | 主键 | 唯一 | 必填 | 默认值 |
编号 | Id | Id | Int32 | 10 | 是 | 是 | 是 | |
角色名称 | RoleName | RoleName | String | 20 | 是 | |||
角色分类 | Category | Category | String | 30 | ||||
排序码 | SortCode | SortCode | Int32 | 10 | 9999 | |||
是否有效 | IsEnable | IsEnable | SByte | 3 | 是 | 1 | ||
备注 | Description | Description | String | 50 |
中文名 | 英文名 | 字段名 | 数据类型 | 大小 | 主键 | 唯一 | 必填 | 默认值 |
编号 | Id | Id | Int32 | 10 | 是 | 是 | 是 | |
父编号 | ParentId | ParentId | Int32 | 10 | 是 | |||
数据库表名称 | DbTable | DbTable | String | 50 | ||||
权限名称 | Name | Name | String | 30 | 是 | |||
是否开启数据权限 | IsDataPermission | IsDataPermission | SByte | 3 | 0 | |||
数据条件 | Constraint | Constraint | String | 100 | ||||
排序码 | SortCode | SortCode | Int32 | 10 | 9999 | |||
是否有效 | IsEnable | IsEnable | SByte | 3 | 是 | 1 | ||
备注 | Description | Description | String | 50 |
中文名 | 英文名 | 字段名 | 数据类型 | 大小 | 主键 | 唯一 | 必填 | 默认值 |
编号 | Id | Id | Int32 | 10 | 是 | 是 | 是 | |
用户编号 | UserId | UserId | Int32 | 10 | 是 | |||
角色编号 | RoleId | RoleId | Int32 | 10 | 是 |
中文名 | 英文名 | 字段名 | 数据类型 | 大小 | 主键 | 唯一 | 必填 | 默认值 |
编号 | Id | Id | Int32 | 10 | 是 | 是 | 是 | |
权限编号 | PermissionId | PermissionId | Int32 | 10 | 是 | |||
用户编号 | UserId | UserId | Int32 | 10 | 是 |
中文名 | 英文名 | 字段名 | 数据类型 | 大小 | 主键 | 唯一 | 必填 | 默认值 |
编号 | Id | Id | Int32 | 10 | 是 | 是 | 是 | |
角色编号 | RoleId | RoleId | Int32 | 10 | 是 | |||
权限编号 | PermissionId | PermissionId | Int32 | 10 | 是 |
1.用户表,角色表,用户角色表很简单,就不用介绍了,它们是多对多的关系。
2 用户权限和角色权限就是权限的分配了,如果用户及其角色具有某一个权限,则具有相应的访问权限。
3.权限表,这个是核心,我觉得我的简洁之处也就是在这里。着重介绍:
权限表是树形的,权限的根节点是以数据库名称来划分,权限是以数据库的数据表为单位的。
所以,权限表有一个字段名为DbTable,这个字段是的含义是“数据库名称+数据表名称”,作用是这样的:
绝大部分权限都是和数据库中某个表相关的,所以这里数据表是主要的权限单位
每个数据库的数据表系统默认6种数据权限:添加、删除、修改、查询、菜单、全局数据权限
也就是说每个数据表都有6个默认的子权限节点,该类型的权限节点是可以自定义的,比如新增一个
数据权限只能在数据表下的5种权限中添加,比如要给 删除添加 数据权限,则在当前表的 删除权限下添加子节点,同时打开父节点的数据权限开关。
当然你也可以自定义一个根节点,来自定义你的相关权限。
比如上面这张简单的示意图,是每个表都有的权限结构,数据权限只能在 增加,删除,修改,查询和全局数据权限5个地方定义,并且这5个权限,若要添加子节点,只能是数据权限。
1.全局数据权限是为了方便数据权限的定义而设置的,比如增删查改,如果都要对某一个字段进行限制,那么只需要在全局里面定义就可以了,没必要到每个增删查改权限中去添加。
2. 关于自定义权限,自定义权限也可以放在任何地方,只要方便你自己就行。比如可以将自定义权限放在表下面,如果有一个表 按钮,或者 菜单,你想添加权限控制,但又和增删查改不完全相干,那你可以在这里自定义一个权限。
3.若定义数据权限,则将约束条件放在Constraint中,然后将数据权限授予角色或者用户。
4.其实用户权限表某种时候是不必要的,用户是属于角色的,只要定义角色权限即可,但为了某些临时需求,临时赋予某些用户一些权限,所以增加了用户权限表。
本权限系统基于Newlife.Xcode,数据权限的实现,就是在对实体进行增删查改时进行条件过滤,目前已经完成40%的开发工作。最近搬家,7月份还要去上海培训,所以最近一段时间是没时间做了,今天在群里面看见有人讨论数据权限,所以就趁机把自己的思路写下来。可能比较混乱,希望大家在论坛或者群里面讨论。本文对于的论坛地址为:
基于Newlife.Xcode的权限系统 欢迎讨论
http://bbs.53wb.com/forum.php?mod=viewthread&tid=196&fromuid=28
Newlife.Xcode的资源:
1.QQ群:1600800
2.博客:http://www.cnblogs.com/nnhy/
http://www.cnblogs.com/asxinyu/
3.论坛:http://www.53wb.com/
4.开源:http://xcode.codeplex.com/
相关文章推荐
- 实现基于组织机构的数据集权限系统的设计思路讲解
- 实现基于组织机构的数据集权限系统的设计思路讲解
- 实现基于组织机构的数据集权限系统的设计思路讲解【提供完整数据库设计下载】
- 实现基于组织机构的数据集权限系统的设计思路讲解【提供完整数据库设计下载】
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- 基于角色访问控制的权限系统设计
- 基于RBAC模型的权限治理系统的设计和兑现
- 用户角色权限系统完整设计(基于shiro)
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- 基于RBAC模型的权限管理系统的设计和实现
- 基于面向对象的权限管理系统设计与实现
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- 基于整合了struts 和hibernate 的j2ee 架构的用户权限管理系统的设计与实现
- 基于RBAC模型的权限设计:如何设计系统权限体系?
- 基于web信息管理系统的权限设计分析和总结
- 通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
- 基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展
- 基于角色访问控制的权限系统设计
- 基于RBAC模型的权限管理系统的设计和实现
- 基于资源的权限系统-数据库设计