通用权限系统设计——第一章

    做了这么久的程序,但是权限的确是一个头痛的事情,于是乎,我们能不能做一个通用的权限,通用说得太绝对,能够用到80%我就心满意足了,好了废话不多说,我们由浅到深,足一说说。

    文章一共有多少章张,这个我也说不清楚,说到什么地方,就什么地方吧。

最简单的:分别有三张表,Users(用表)、Modules(模块表)、Roles(角色表)

 

最后有SQL创建表或表数据的脚本,

 

模块表数据:


角色表数据:



用户表数据:

我们用admin 登录,获取它拥有的模块

首先我们先获取它的角色,然后根据角色获取角色的模块:

这里会出现一个用户存在多个角色的情况,所以查询语句需要改成



然后获取到模块的编号了,然后我根据模块的编号去获取模块的信息,这里也得需要用到IN的方式去查询,而不能直接用等于:


这样就得到了父级的模块了,我相信子级的,也不难了吧,查询语句如下

 

View Code
SELECT * FROM Modules 

WHERE ParentID<>0 AND ModuleID IN(1,2,3,4,5,6)

ORDER BY ModuleSrot ASC--这里是全部获取,但是这种不大有意义

 

我们要获取父级的ModuleID然后在查询 

View Code
SELECT * FROM Modules 

WHERE ParentID=(获取的ModuleID作查询条件) AND ModuleID IN(1,2,3,4,5,6)

ORDER BY ModuleSrot ASC

 


好,今天到此为止,下次继续,下次来中间表来做,查询的时候就简单多了,这种也有它一定的好处,这个就自己细细慢慢想想吧,下个给出数据的脚本:

View Code
------------------------------------------------------------------------------表--------------------------------------------------------------------

CREATE TABLE Users --用户表

(

UserID int identity(1,1) primary key not null, --用户编号

UserName varchar(20) not null, --用户名

Password varchar(50) not null, --用户密码

RoleID varchar(50) not null, --角色编号(外键:Roles)

)



GO



CREATE TABLE Modules

(

ModuleID int identity(1,1) primary key not null, --模块编号

ModuleName varchar(50) not null, --模块名

ParentID int DEFAULT(0) not null, --父编号

LinkUrl varchar(200) null, --模块连接地址

ModuleSrot int null, --模块的排序

ModuleVisible bit DEFAULT(1) null, --模块是否现在

--ParentID 为0时,表示顶级,比如“用户管理”ModuleID为1,下面的子级就为“添加用户”它的ParentID就为1

--里面的字段要可以添加,不如图片地址什么的,这里就不写了

)

GO



CREATE TABLE Roles --角色表

(

RoleID int identity(1,1) primary key not null, --角色编号

RoleName varchar(20) not null, --角色名

Descriptions varchar(50) not null, --角色描述

Status int DEFAULT(1) not null, --状态

ModuleID varchar(500) not null, --模块编号(外键:Modules)

)



GO





--Users表中RoleID的值是roles的编号,存储值为:1,2,3多个角色,这里也可以用中间表来表示,这里就不举例了

--Roles表中的ModuleID和Users表中RoleID的值差不多,

------------------------------------------------------------------------------表数据--------------------------------------------------------------------

INSERT [Modules] ([ModuleID],[ModuleName],[ParentID],[ModuleSrot],[ModuleVisible]) VALUES ( 1,N'用户管理',0,1,1)

INSERT [Modules] ([ModuleID],[ModuleName],[ParentID],[LinkUrl],[ModuleSrot],[ModuleVisible]) VALUES ( 2,N'添加用户',1,N'AddUser.aspx',1,1)

INSERT [Modules] ([ModuleID],[ModuleName],[ParentID],[LinkUrl],[ModuleSrot],[ModuleVisible]) VALUES ( 3,N'用户列表',1,N'UserList.aspx',2,1)

INSERT [Modules] ([ModuleID],[ModuleName],[ParentID],[ModuleSrot],[ModuleVisible]) VALUES ( 4,N'角色管理',0,2,1)

INSERT [Modules] ([ModuleID],[ModuleName],[ParentID],[LinkUrl],[ModuleSrot],[ModuleVisible]) VALUES ( 5,N'添加角色',4,N'AddRole.aspx',1,1)

INSERT [Modules] ([ModuleID],[ModuleName],[ParentID],[LinkUrl],[ModuleSrot],[ModuleVisible]) VALUES ( 6,N'角色列表',4,N'RoleList.aspx',2,1)


go

INSERT [Roles] ([RoleID],[RoleName],[Descriptions],[ModuleID]) VALUES ( 1,N'管理员',N'拥有所有权限',N'1,2,3,4,5,6')

INSERT [Roles] ([RoleID],[RoleName],[Descriptions],[ModuleID]) VALUES ( 2,N'二级管理员',N'拥有用户管理权限',N'1,2,3')

INSERT [Roles] ([RoleID],[RoleName],[Descriptions],[ModuleID]) VALUES ( 3,N'三级管理员',N'拥有角色管理权限',N'4,5,6')


go

INSERT [Users] ([UserID],[UserName],[Password],[RoleID]) VALUES ( 1,N'admin',N'123123',N'1')

INSERT [Users] ([UserID],[UserName],[Password],[RoleID]) VALUES ( 2,N'admin1',N'123123',N'2')

INSERT [Users] ([UserID],[UserName],[Password],[RoleID]) VALUES ( 3,N'admin2',N'123123',N'3')

INSERT [Users] ([UserID],[UserName],[Password],[RoleID]) VALUES ( 4,N'admin3',N'123123',N'2,3')



posted @ 2012-03-16 23:11  luxianai  阅读(841)  评论(2编辑  收藏  举报