惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
博客园 - 【当耐特】
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
美团技术团队
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
Martin Fowler
Martin Fowler
Recorded Future
Recorded Future
H
Help Net Security
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
博客园_首页
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
B
Blog
The Register - Security
The Register - Security
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
雷峰网
雷峰网
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
N
Netflix TechBlog - Medium
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
有赞技术团队
有赞技术团队
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News - Newest:
Hacker News - Newest: "LLM"
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
W
WeLiveSecurity
Latest news
Latest news
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 叶小钗
L
Lohrmann on Cybersecurity
博客园 - Franky
Recent Commits to openclaw:main
Recent Commits to openclaw:main
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO

博客园 - sdav

无耻的360是否还值得大家支持? 博客员光写技术博客,咱发篇文学吧.活跃活跃气氛. 解决ORA-12514 TNS:监听程序当前无法识别连接描述符中请求的服务的偷懒办法. MMC创建无法管理单元。 关于ShowModalDialog数据缓存的清除 基于Remoting的应用程序自动更新。 很早前写的用例分析,看看还挺有意思. .NET中的文件监视类 Excel格式文件上传到数据库 将excel表格导入数据库 将ListView中的内容倒入到Excel - sdav - 博客园 Ext 类视图 Windows Server 2003服务器群集创建和配置指南 PL/SQL Developer 注册码 v7.0.2.1076 万分紧急----求一个ODP.Net(Oracle Data Provider for .NET Release 9.2.0.2.102) 选择奋斗---激励自己 老文了,还是放在这里吧,要不可能丢失了。也不知道谁是作者。 - sdav - 博客园 秀一下咱的自定义表单 工作流 -- 流程节点动作说明
通用权限架构设计
sdav · 2008-11-12 · via 博客园 - sdav
 

权限架构设计

一、设计说明

由于现在系统的设计具有很多不可知的因素,可能存在未来的扩展,故此,在设计本权限架构时,尽可能的顾及到了未来的系统扩充和可操作性、可维护性。把此权限架构作为一个独立的模块进行开发,方便未来的其他系统应用。

设计说明:

本架构采用树型权限模型处理,所有节点,都可以作为权限的实体存在。

如:

         |--权限A

         |--------插入记录。

         |--------修改记录。

         |--------删除记录。

         |--------查询权限。

|--权限B

         |--------打印权限。

         |--------浏览权限。

         |--------管理权限。

         |--------查询权限。

如上所示,在[权限A]这个模块下,存在了插入、修改、删除、查询四个权限(也可能是存在多个),那么我们为了扩展的方便,将所有的权限,都以此树的形式进行处理,针对某一个权限节点,进行判断,控制。当我们要控制某一个模块的权限时,我们可以针对其父节点进行控制,当我们需要控制到某一个末端的权限时,我们可以针对末端子节点进行控制。

每一个用户,都可以拥有多种角色,这样,我们可以方便处理交叉权限。

二、库表结构

见附件:PurviewTable.Sql

注:为方便移植,在程序编写过程中,应尽量避免使用存储过程,尽量使用标准SQL和数据集进行操作,数据集的使用,尽量使用非强命名的数据集,数据查询时,避免标明字段的查询,条件允许的情况下,尽量使用*号,方便扩展。

为了程序编写的方便,所有表,都没有使用关系,所以,在表的添加删除操作时,一定要到位,特别时删除时,关系子表的数据一定要同步删除。

三、程序设计

1、   权限维护模块。

本模块主要实现针对权限树(表Tab_Purview)的维护,实现以树的形式的维护管理。

实现要点:

A、   实现权限表以树形式的显示。

B、   实现权限表的不同节点的插入、修改、删除。

2、   用户维护模块。

本模块主要实现对用户的管理,针对用户表(Tab_UserTable)的操作。实现其添加、删除、修改等功能。用户密码字段(UserPass)应保存加密后的密码。

3、   角色维护模块

本模块主要实现针对角色的维护,其实就是表Tab_Role的插入修改删除。

A、   针对角色表Tab_Role的插入删除,对应的角色权限表Tab_RolePurview也要进行操作。

B、   每建立一个角色,将权限表Purview中的权限架构信息COPY一份到Tab_RolePurview表,并赋于其相应的权限。

C、   该角色所包含的用户的管理,针对该角色,添加、删除包含的用户。当添加一个用户时,就要向角色用户权限表Tab_RoleUserPurview插入数据,Copy角色用户表中Tab_RolePurview的数据到Tab_RoleUserPurview表。

D、   当删除一个用户时,应当连同Tab_RoleUserPurview中该用户的权限一同删除。

E、   当删除一个角色时,应当连同Tab_RoleUserPurview中该角色的权限一同删除。

4、   权限校验模块。

权限的校验可以直接根据模块IDTab_Purview中的ID)检索Tab_RoleUserPurview表,检索Purview[]的数据,如果存在行,说明该用户存在此模块的操作权限,否则说明该用户没有此模块的权限。

5、   扩展办法。

A、   用户登陆。

用户登陆时,直接读Tab_UserTable的数据,传入用户ID和加密后的密码进行比对检索。

B、   其他

6、   其他

四、界面设计

1、 权限维护。

见控件:UC_PurviewManagerUC_PurviewAdd,新增和修改可以使用同一界面。

2、 用户管理。

见控件:UC_UserManager,UC_UserAdd,新增和修改可以使用同一界面。

3、 角色管理。

见控件:UC_RoleManager

4、 系统登陆。

见控件:UC_Login

五、其他

A、 字典管理

字典的管理其实就是一个表(Tab_Dictionary)的读写操作。

界面见UC_DicManager

左边为字典树,里面根据Tab_Dictionary中的唯一字典名列出,选择左边字典名时,右边GRID中列出该字典下的所有字段变量,选择一个字段变量,将字段变量的信息读入上面编辑框中,点保存保存到库。如果是新的字典,则直接插入到表,然后刷新左侧树信息。点删除时,删除GRID选择的数据。如果只有一条,提示不能删除。字典最少要保留一条数据。

六、时间要求:

SQL脚本

--权限树表,主要是保存一个权限架构的模型。
Create Table Tab_Purview
(
 PurviewID Int Identity (1, 1) Not Null, --自增ID
 ParentID Int Null,                      --父节点ID
 OrderIndex Int Null,                    --排序ID,主要是方便以后的权限编辑
 NodeName Varchar(50),                   --权限节点名称
 Describes Varchar(200)                  --权限节点描述
);

--角色表,保存角色和角色的描述信息。
Create Table Tab_Role
(
 RoleID Int Identity (1, 1) Not Null, --自增ID
 RoleName Varchar(50) Not Null,       --角色名称
 Describes Varchar(200)               --角色描述
);

--角色权限表,保存某一个角色的权限信息。
Create Table Tab_RolePurview
(
 RoleID Int Not Null,             --角色ID
 PurviewID Int Not Null,          --权限ID
 PurviewName Varchar(50) Not Null,--权限名称,这里的权限名称其实是一个冗余字段,主要是方便显示,显示时不用再使用联合查询。
 Describes Varchar(200),          --权限节点描述
 Purview   Varchar(2) Not Null    --权限,这里记录一个文本类型(有、无)
);

--用户表,保存用户信息。
Create Table Tab_UserTable
(
 UserID Int Identity (1, 1) Not Null,--用户ID
 UserName  Varchar(50),              --用户名称,这里的用户名称其实是一个冗余字段,主要是方便显示,显示时不用再使用联合查询。
 UserPass  Varchar(2000),            --用户密码,保留2000的长度主要是针对密码的加密处理。
 Describes Varchar(200)              --用户描述
);

--角色用户表,保存某一个角色下的用户信息。
Create Table Tab_RoleUser
(
 RoleID Int Not Null,             --角色ID
 UserID Int Not Null,             --用户ID
 UserName Varchar(50)             --用户名称。
);

--角色用户权限表,保存某一个角色下的用户权限信息。
Create Table Tab_RoleUserPurview
(
 RoleID Int Not Null,             --角色ID
 UserID Int Not Null,             --用户ID
 PurviewID Int Not Null,          --权限ID
 PurviewName Varchar(50),         --权限名称,这里的权限名称其实是一个冗余字段,主要是方便显示,显示时不用再使用联合查询。
 Purview   Varchar(2) Not Null    --权限,这里记录一个文本类型(有、无)
);