做了这么久的程序,但是权限的确是一个头痛的事情,于是乎,我们能不能做一个通用的权限,通用说得太绝对,能够用到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')