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

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 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    --权限,这里记录一个文本类型(有、无)
);