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

记得上次写这系列文章的时候,还在是一个月之前,今天我们继续讲解。

今天我们主要围绕第二章的内容进行拓展,主要讲解模块所对应的权限,如果没有看到第二章的童鞋可以点击这里查看:点击查看,话不多说,直接切入主题。

首先我们得建立三张表,一张“权限表(Permissions)”, 一张中间表“模块权限表(ModulePermissions)”和一张角色权限表(RolePermissions,最后有SQL创建表或表数据的脚本,这三张表结构如下:

权限表(Permissions):

 

(这里面的字段还可以加上,不如排序字段什么的,这个按照自己的需要添加,但是这三个字段必须存在,PermissionCode这个字段将要用到用户章节提到的权限控件,所以我在这里就必须加上这个字段,如果你不需要,可以删除的)

 

模块权限表(ModulePermissions):

 

角色权限表(RolePermissions):



 

好,在这里,我们就将用到的两张表创建完成了,现在我们来看看整体表中的关系,详情如下图:

这里就是整体权限的关系图,到目前为止,关系到权限数据库表中也就全部完成,现在我们来添加一天数据到数据库中,进行测试一下。

表中的数据如下:

权限表(Permissions):


目前先添加四种权限功能,也可以按照你的需要,添加更多的功能权限,比如;打印,导出,导入等。


模块权限表(ModulePermissions):


这里必须得保证,如果模块中有出了,浏览其他权限功能的话,就必须包括浏览权限,有浏览权限,可以不包括其他功能权限。在模块中的数据都是一些数字,不能看到详细的全是,等下我们将查询出来,进行详细的查看,这样才更容易看到这里面关联到的内容。

 

角色权限表(RolePermissions):



这张表得重点说一下,因为这张表的数据是这样的,里面的PermissionID是根据模块权限表(ModulePermissions)得到的,而不是根据权限表(Permissions)获取的。其中里面的数据包括角色1,2,3的模块功能全是,其中角色一:具有所有权限功能,角色二:只针对模块编号为1,2,3有所有权限,角色三:只针对模块编号为4,5,6有所有权限,这里的权限可以任意设置,所以我暂时做成这样,后面将建立程序来实现,可看性就比这个高很多了。

 

现在我们来看看在数据库中执行sql来查一下吧。

我们先看模块中的所属的功能权限:

为了方便,我们将建立一个视图来进行查询,视图命名为:View_ModulePermissions,查询结果如下:


从上图我们可以很明确的看到,模块中所属的权限了,是不是非常的简单,一目了然。

 

现在我们在来看看角色对应的模块功能权限吧,这里同时我们也要建立一张视图来实现,视图名称为:View_RolePermissions

有上图我们可以看出,其中角色权限表(RolePermissions)是和刚刚上一个视图View_ModulePermissions进行联合查询的,这里就清楚的看出角色在各个模块中所属的权限了。

现在还得建立两种管理用户和角色的视图:

先建立一张View_UserRoles视图

然后在建立一张View_UserModulePermissions视图

好,在这里,程序中所需要的视图基本创建完成,现在我用用户来查询所属模块中的功能权限吧,这里我就不做详细的查询了,我们只做一个用户的查询,因为这个用户比较特殊,也就是用户admin3,因为他包括两个角色,现在我们重点看看这个用户:

这里我们将直接用到用户id进行查询,因为在程序上面也将会用到这种情况,到目前为止,数据库所需要的东西,我们已经全部说完了,下章将会结合程序进行分析,以上东西如果你有更好的想法,留言给我,我们将进行改进,谢谢!

 

下面将献上本次数据库的数据库跟新脚本:

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

DROP TABLE [Permissions]



CREATE TABLE [Permissions] (

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

[PermissionName] [nvarchar] (20) NOT NULL,

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



ALTER TABLE [Permissions] WITH NOCHECK ADD CONSTRAINT [PK_Permissions] PRIMARY KEY NONCLUSTERED ( [PermissionID] )

SET IDENTITY_INSERT [Permissions] ON



INSERT [Permissions] ([PermissionID],[PermissionName],[PermissionCode]) VALUES ( 1,N'添加',N'Add')

INSERT [Permissions] ([PermissionID],[PermissionName],[PermissionCode]) VALUES ( 2,N'删除',N'Delete')

INSERT [Permissions] ([PermissionID],[PermissionName],[PermissionCode]) VALUES ( 3,N'修改',N'Edit')

INSERT [Permissions] ([PermissionID],[PermissionName],[PermissionCode]) VALUES ( 4,N'浏览',N'Browse')



SET IDENTITY_INSERT [Permissions] 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('[RolePermissions]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)

DROP TABLE [RolePermissions]



CREATE TABLE [RolePermissions] (

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

[RoleID] [int] NOT NULL,

[PermissionID] [int] NOT NULL,

[ModuleID] [int] NOT NULL)



ALTER TABLE [RolePermissions] WITH NOCHECK ADD CONSTRAINT [PK_RolePermissions] PRIMARY KEY NONCLUSTERED ( [RolePermissionID] )

SET IDENTITY_INSERT [RolePermissions] ON



INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 1,1,4,1)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 3,1,4,2)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 4,1,1,2)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 5,1,4,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 6,1,1,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 7,1,2,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 8,1,3,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 9,1,4,4)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 10,1,4,5)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 11,1,1,5)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 12,1,4,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 13,1,1,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 14,1,2,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 15,1,3,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 16,2,4,1)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 17,2,4,2)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 18,2,1,2)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 19,2,4,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 20,2,1,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 21,2,2,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 22,2,3,3)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 23,3,4,4)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 24,3,4,5)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 25,3,1,5)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 26,3,4,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 27,3,1,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 28,3,2,6)

INSERT [RolePermissions] ([RolePermissionID],[RoleID],[PermissionID],[ModuleID]) VALUES ( 29,3,3,6)



SET IDENTITY_INSERT [RolePermissions] OFF

go
CREATE VIEW [dbo].[View_ModulePermissions]

AS

SELECT dbo.Modules.ModuleID, dbo.Modules.ModuleName, dbo.Modules.ParentID, dbo.Permissions.PermissionID, dbo.Permissions.PermissionName,

dbo.Permissions.PermissionCode

FROM dbo.Permissions INNER JOIN

dbo.ModulePermissions ON dbo.Permissions.PermissionID = dbo.ModulePermissions.PermissionID INNER JOIN

dbo.Modules ON dbo.ModulePermissions.ModuleID = dbo.Modules.ModuleID

GO

CREATE VIEW [dbo].[View_UserRoles]

AS

SELECT dbo.Users.UserID, dbo.Users.UserName, dbo.Roles.RoleID, dbo.Roles.RoleName, dbo.Roles.Descriptions

FROM dbo.Roles INNER JOIN

dbo.UserRoles ON dbo.Roles.RoleID = dbo.UserRoles.RoleID INNER JOIN

dbo.Users ON dbo.UserRoles.UserID = dbo.Users.UserID

GO



CREATE VIEW [dbo].[View_RolePermissions]

AS

SELECT dbo.View_ModulePermissions.ModuleID, dbo.View_ModulePermissions.ModuleName, dbo.View_ModulePermissions.PermissionCode,

dbo.View_ModulePermissions.PermissionName, dbo.View_ModulePermissions.PermissionID, dbo.View_ModulePermissions.ParentID,

dbo.RolePermissions.RoleID

FROM dbo.RolePermissions INNER JOIN

dbo.View_ModulePermissions ON dbo.RolePermissions.ModuleID = dbo.View_ModulePermissions.ModuleID AND

dbo.RolePermissions.PermissionID = dbo.View_ModulePermissions.PermissionID

GO



CREATE VIEW [dbo].[View_UserModulePermissions]

AS

SELECT dbo.View_UserRoles.RoleName, dbo.View_UserRoles.UserID, dbo.View_UserRoles.UserName, dbo.View_RolePermissions.ModuleID,

dbo.View_RolePermissions.ModuleName, dbo.View_RolePermissions.PermissionCode, dbo.View_RolePermissions.PermissionName,

dbo.View_RolePermissions.PermissionID, dbo.View_RolePermissions.ParentID, dbo.View_UserRoles.RoleID

FROM dbo.View_UserRoles INNER JOIN

dbo.View_RolePermissions ON dbo.View_UserRoles.RoleID = dbo.View_RolePermissions.RoleID

GO



posted @ 2012-03-25 16:36  luxianai  阅读(807)  评论(3编辑  收藏  举报