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


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



  • 相关阅读:
    [转]ABAP动态取得数据
    [转]ABAP学习笔记之三内表
    [转]ABAP实现对变式的修改
    [转]ABAP Search help
    C#中访问私有成员[转载]
    如果在BackgroundWorker运行过程中关闭窗体…
    交叉编译的概念
    索引器的重载的一个例子
    自定义类实现IComparable接口
    ioctl函数
  • 原文地址:https://www.cnblogs.com/luxianai/p/Permission.html
Copyright © 2020-2023  润新知