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

第一章我们说了权限,地址为:http://www.cnblogs.com/luxianai/archive/2012/03/16/Permission.html,但是没有用到中间表,今天我们来说说使用中间来做,这样查询将会更加方便,具体如下:

分别有五张表,Users(用户表)、Modules(模块表)、Roles(角色表)、UserRoles(用户角色表)、RoleModules(角色模块表)

 

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

表结构如下:

模块表:

用户表,此表中的RoleID不存在了,将用中间表来呈现:

角色表:此表中的ModuleID不存在了,也将用中间表来呈现:

用户角色表:

角色模块表:

 

表中的数据如下:

模块表中的数据保持不变:


用户表数据:


角色表数据:

用户角色表数据:用户编号1角色是管理员,特别介绍一下用户编号为4的,它有两个角色


角色模板表数据:(角色1用户所有权限,角色2和3分别有部分权限)



依然我们分别用admin 1 2 3来登录,获取所属的角色和模块:

 

然后根据登录用户获取模块


用中间表来查询,获取的数据相对来说要要简单多了。好,今天也到此为止,下期我们将讨论的是模块的权限功能,下面是数据库脚本:

 

View Code
if exists (select * from sysobjects where id = OBJECT_ID('[Modules]') and OBJECTPROPERTY(id, 'IsUserTable') = 1) 

DROP TABLE [Modules]



CREATE TABLE [Modules] (

[ModuleID] [int] IDENTITY (1, 1) NOT NULL,

[ModuleName] [varchar] (50) NOT NULL,

[ParentID] [int] NOT NULL DEFAULT (0),

[LinkUrl] [varchar] (200) NULL,

[ModuleSrot] [int] NULL,

[ModuleVisible] [bit] NULL DEFAULT (1))



ALTER TABLE [Modules] WITH NOCHECK ADD CONSTRAINT [PK_Modules] PRIMARY KEY NONCLUSTERED ( [ModuleID] )

SET IDENTITY_INSERT [Modules] ON



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)



SET IDENTITY_INSERT [Modules] OFF

if exists (select * from sysobjects where id = OBJECT_ID('[RoleModules]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [RoleModules]



CREATE TABLE [RoleModules] (

[RoleID] [int] NOT NULL,

[ModuleID] [int] NOT NULL)



INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 1,1)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 1,2)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 1,3)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 1,4)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 1,5)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 1,6)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 2,1)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 2,2)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 2,3)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 3,4)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 3,5)

INSERT [RoleModules] ([RoleID],[ModuleID]) VALUES ( 3,6)

if exists (select * from sysobjects where id = OBJECT_ID('[Roles]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [Roles]



CREATE TABLE [Roles] (

[RoleID] [int] NOT NULL,

[RoleName] [varchar] (20) NOT NULL,

[Descriptions] [varchar] (50) NOT NULL)



ALTER TABLE [Roles] WITH NOCHECK ADD CONSTRAINT [PK_Roles] PRIMARY KEY NONCLUSTERED ( [RoleID] )

INSERT [Roles] ([RoleID],[RoleName],[Descriptions]) VALUES ( 1,N'管理员',N'拥有所有权限')

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

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

if exists (select * from sysobjects where id = OBJECT_ID('[UserRoles]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [UserRoles]



CREATE TABLE [UserRoles] (

[UserID] [int] NOT NULL,

[RoleID] [int] NOT NULL)



INSERT [UserRoles] ([UserID],[RoleID]) VALUES ( 1,1)

INSERT [UserRoles] ([UserID],[RoleID]) VALUES ( 2,2)

INSERT [UserRoles] ([UserID],[RoleID]) VALUES ( 3,3)

INSERT [UserRoles] ([UserID],[RoleID]) VALUES ( 4,2)

INSERT [UserRoles] ([UserID],[RoleID]) VALUES ( 4,3)

if exists (select * from sysobjects where id = OBJECT_ID('[Users]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [Users]



CREATE TABLE [Users] (

[UserID] [int] IDENTITY (1, 1) NOT NULL,

[UserName] [varchar] (20) NOT NULL,

[Password] [varchar] (50) NOT NULL)



ALTER TABLE [Users] WITH NOCHECK ADD CONSTRAINT [PK_Users] PRIMARY KEY NONCLUSTERED ( [UserID] )

SET IDENTITY_INSERT [Users] ON



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

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

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

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



SET IDENTITY_INSERT [Users] OFF

 

posted @ 2012-03-25 16:32  luxianai  阅读(573)  评论(0编辑  收藏  举报