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


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

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

    首先我们得建立三张表,一张“权限表(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



  • 相关阅读:
    Scrapy(爬虫)基本运行机制
    Python面向对象中的“私有化”
    基于Requests和BeautifulSoup实现“自动登录”
    BeautifulSoup模块
    Python爬虫之-Requests
    踩坑之jinja2注释问题(Flask中)
    Struts2 从一个Action跳至另一个Action
    @JSON(serialize=false),过滤不需要的变量
    JS function的参数问题
    nginx反向代理配置及优化
  • 原文地址:https://www.cnblogs.com/luxianai/p/tyqx3.html
Copyright © 2020-2023  润新知