• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> 数据库 >> 数据库综合 >> 详细内容
 

推荐文章

 
 

热点文章

  • sql分页存储过程
  • 数据库开源市场成热点 IBM拒绝甲骨文Linux战略
  • 三步堵死SQL注入漏洞
  • 支付宝数据库架构师冯大辉:谈数据库架构
  • 主流开源数据库的技术特点点评
  • 用LiquiBase进行数据库迁移与重构
  • 数据库设计中的技巧
  • 浅谈数据库设计的一些经验
  • 数据库分表处理设计思想和实现
  • 主流开源数据库的技术特点点评
  • txtSQL安装手册中文版
  • 纯真IP数据库格式详解
 
 

相关文章

  • 2008年流行CMS深度评测报告(二)
  • 2008年流行CMS深度评测报告(三)
  • 2008年流行CMS深度评测报告(一)
 
 

百度搜索

 
 

高级权限管理系统的设计

  • 阅览次数:
  • 文章来源: CP整理
  • 原文作者:
  • 整理日期: 2008-09-04
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

高级权限管理系统的设计
                                         ---- 基于角色+模块的权限控制管理实现


 

          在任何系统中,权限设计是最基础的东西,一个好的权限系统,可以为开发人员提高开发进度;而且,又可以为用户提供完美的可扩展权限管理,而非简单的权限定制。
本文实现功能:实现基于角色+模块+权限粒度的权限管理
相关概念:
(1)角色:是一类功能的集合,比如新闻编辑这个角色,他可能有起草新闻、编辑新闻等功能集合,而责任编辑他可能就有更多的权限,比如除了新闻编辑的功能,还有审核新闻、删除新闻等粒度级别操作;这个可以理解为程序设计中的组.
(2)权限粒度:它是最小的单位,比如起草新闻、编辑新闻、审核新闻、删除新闻等
(3)用户:就是一个系统的最终使用用户(包括管理人员和被管理人员)
(4)资源:管理的对象


下面模拟对一个信息系统的控制数据:

(图一. 权限示意图)


用户信息表:

UserID

UserName

U1

张三

U2

李四

角色表:

RoleID

RoleName

R1

新闻编辑

R2

责任编辑

角色用户表:

RoleID

UserID

R1

U1

R2

U2

权限粒度表:

PrivilegeID

ResourceType

PrivilegeTitle

P1

NTA

起草新闻:分类A

P2

NTA

编辑新闻:分类A

P3

NTA

审核新闻:分类A

P4

NTA

删除新闻:分类A

P1

NTB

起草新闻:分类B

P2

NTB

编辑新闻:分类B

P3

NTB

审核新闻:分类B

P4

NTB

删除新闻:分类B

注意:这个表里面添加有资源(模块)信息

角色权限表:

RoleID

PrivilegeID

R1

P1

R1

P2

R2

P1

R2

P2

R2

P3

R2

P4

判断一个用户具有某个模块权限实现:

#获取权限(Privileges)的语句:
Select PrivilegeID  + `,` + ResourceType From 角色权限表 Where RoleID In (Select RoleID From 用户角色表 Where UserID='U1')

#权限的判断
Privileges.Contain('F1,NTA');


在新添加一个分类的时候,同时也在权限表中增加相应的记录(当然不是在数据库里面直接添加,由和权限相关的函数来添加)。
使用这种解决方案可以简单地对有分类的应用(比如论坛系统)的每个分类实行不同的控制(比如VIP板块,就只能拥有VIP角色的用户才能浏览、发表等,而其他板块只要是注册用户就可以使用了)。

在实际应用中PrivilegeID并不是随便的一个字符串,而是进行了编码,其编码中包含了模块ID以及能够体现出父子关系,举个例子来说:对于论坛系统,我们给它一个模块ID为”30”,论坛的权限我们先分成2类,一类是管理类(比如删除帖子),一类是使用类(比如发帖、回帖、浏览帖子等),给管理类一个编码:01,使用类一个编码:02,我们就对PrivilegeID进行如下的编码:
300101:删除帖子
300201:发帖
300202:回帖
300203:浏览帖子

对于资源(比如某个板块1,板块的ID为:01),我们可以组合出如下的Privileges(当然这个组合你也可以不用逗号分隔,用其他的组合方式也可以,不过不要产生歧义):
300101,01:板块1删除帖子的功能
300201,01:板块1发帖的功能
……
    对于RoleID也是采用的编码方式,也能体现角色的父子关系,也可以实现角色功能的继承等(当然获取角色功能列表的SQL语句就不是现在这么简单了)。在我现在的应用里面没有实现角色的继承(虽然角色的编码体现出了角色的父子关系)。

上一篇:优化SQL Server数据库的十个问题
下一篇:技术高手的十三个原则
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号