通用权限系统设计——第二章
第一章我们说了权限,地址为: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