对权限控制又很深入的讨论(1)

控制

我也请教一个关于权限设计方面的问题

我现在在做一个系统,一个类似信息发布的东东,本来也无所谓,可没想到用户提出了许多BT的要求,尤其是权限方面,本来照我的常规思维,这种东东一般也就是划分几个角色,划分几个信息的发布模块等等也就行了,甚至公司都有现成的东西直接用。
可没想到客户的要求比较刁钻。我先说说系统的大概模样。
信息发布吗,首先当然要划分信息的类别和层次,而这层次是不定的,可能是两三层,也可能是十层、八层(没这么变态吧^_^),其实就类似与windows的资源管理器的样式,目录里面含着文件,而文件又有可能和目录平级的说,这是显示方面大概要显示的东东。现在说说他们在权限控制方面的要求,某个用户登录系统之后,这些目录文件(使用的是资源管理器类似的样式,左边一颗树,右边基本信息列表)将需要根据用户权限的不同而不同(有的目录文件显示,有的不显示的说),当然对于不同的记录用户也需要有不同的增删改权限,列表虽然都能看见,不过有的记录他可以修改却不可以删除,有的却连修改都不许了,当然还有其他的一下操作方式的控制。更为变态的是,要求点击某条记录(或目录、或文件)时弹出的信息查看页面对于不同权限的用户也需不同,即某些字段可以显示,某些字段不能显示(my god,还是把我回收了得了),这就要求在后台的管理方面有着灵活的操作,当然用户也要求了,本着易用性的原则,管理员可以适当选择是对一条条记录赋权还是对一批记录赋权。

说了这么多,不知道各位能否看明白?

我开始的想法是定义组,将某些权限相同的用户赋为一组,然后对记录赋权时根据组进行选择而不用对每个人进行选择,这样就不需对个人进行操作(即使一个人也给他搞个组),这样对组配置改组可以对记录有那些权限,可以显示记录的那些字段,然后针对记录选择组(一个用户可能属于多个组,如有重复,则以用户能获得的最大权限为主)。
不过后来一想,加入某些记录只是针对个人的,如果也这么做的话,会死人的啊,组的数量就太多了。

不过用户的这些要求说到底其实也挺合理,不过实现起来也确实挺头疼,反正我头疼了一个下午了,几张目录文件的表画好后,后台权限方面我死活下不了手了:(
我也希望能够趁这个系统的机会把这个权限管理好好核计核计,反正尽量希望能在设计阶段就考虑完善,最好能将权限这块尽量独立出来,将来在其他系统中可以比较方便地移至(估计也没那个信息系统有这么繁琐的要求了,本来不大的玩意,愣是让他们搞大发了)

但本人在设计方面是个新手,所以感觉难度实在挺大,还是先听听各位在座的高论先,请指教一下该如何下手,信息表与权限表该如何关联,如果有谁做过这方面的东东的话,那就更好了。

所有经验、方法、建议,在下一律欢迎,还请各位不吝赐教,我实在是头都大了

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 00:36:37 回复

发表人: iceant 发表文章: 413 / 注册时间: 2002-10
1. 对"有的目录文件显示,有的不显示的"疑问
具体到一个目录下的文件是可以控制显示与不显示,但是对目录而言不适合做这样的控制。为什么?假如用户只对 1.1.1 目录有访问权限,那么 1.1 的目录级别要不要体现出来?如果只列用户有权限的目录,那怎么能看得出是 1.1.1 的那个目录?

2.组与用户
你的应用实际上是动态责任确定的应用,在程序规划与实施阶段没有办法获知有哪些角色能操作哪些对象;
另外,权限设计不可过于复杂,否则管理员也会弄不清自己分配的权限是什么样的,最少我自己加个两三层的东东就会头晕。
因此我建议你做基于 ACL 的控制。你提到了想使用组的概念,但是你想为一个人也定义一个组,我认为没有必要,完全可以是用户(User)与 Subject(Folder|Documents)直接对应。如果只能有一个人操作一个目录的文件修改,那你直接授权给某个人,和修改 Role-User Map 关系的维护量没有多大的差别。但是如果对一个目录同一种 Permission 的操作分别授权给不同的用户,维护起来肯定没有建个组或一个角色来得简单。

因此,我的选择是直接使用 Subject,Group,User 的三级关系。
这里先解释几个名词:
Subject: 各种目录,文件等对象
Group: 用户集合
User:用户
Operation: 对 Subject 的某种具体操作,如 Visit,Modify,Delete 等
Permission: 是 Subject 与 Operation 的组合,如:指对某个目录的Visit操作

OK, 那让我们来建几个表吧:
Permissions_Table(
subject varchar(20),--对应目录或文件的ID
user_name varchar(10), -- USER-Subject ACL
group_name varchar(10), -- Group -Subject ACL
operation_type int, --1:visit,2:modify 4:delete,3:visit+modify,5:delete+visit,6:delete+modify,7:visit+modify+delete
subject_type int, --1:dir,2:document
)

user_group_table(
user_name varchar(10),
group_name varchar(10),
primary key(user_name,group_name)
)

再下面....
我相信你有能力做完的....

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 10:02:00 回复

发表人: ninsky 发表文章: 20 / 注册时间: 2003-10
感谢iceant,你的意见给了我一个思路,某些地方我确实走入了歧途,也盲目的想设计一个通用的东东(估计这就是过度设计)

不过我还想请教一下就是,对于控制到字段的权限模式你能否也提供一点建议呢

我现在就是想多找些人,听一下别人的意见,然后再自己综合一下,希望能够尽量好的实现这套权限管理功能

希望各位多多发言,希望能对我这已经困累欲绝的大脑来点刺激

再次感谢iceant,jdon的讨论风气是我转的几个论坛中最好的一个了

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 11:16:11 回复

发表人: iceant 发表文章: 413 / 注册时间: 2002-10
"对于控制到字段的权限模式你能否也提供一点建议呢"

什么叫控制到字段的权限模式?

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 12:19:51 回复

发表人: ninsky 发表文章: 20 / 注册时间: 2003-10
> "对于控制到字段的权限模式你能否也提供一点建议呢"
>
> 什么叫控制到字段的权限模式?

就是对于某个表中的某些字段是可以显示的,而某些是不显示的

当然有个方法是将所有的表的字段及相关的描述信息放到一个数据字典表中,然后对数据字典进行一些相关的赋权操作,不过这样作要求数据字典和所有的表的字段同步

不过总感觉这种方法并不是太好,不过我也没想到其他的方法

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 12:29:24 回复

发表人: iceant 发表文章: 413 / 注册时间: 2002-10
能不能详细说说你的应用情景? 举个例子

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 13:41:19 回复

发表人: ninsky 发表文章: 20 / 注册时间: 2003-10
> 能不能详细说说你的应用情景? 举个例子

用户、单位等信息存储在LDAP中,而且是远程的,我的系统虽说取的是LDAP中的用户、单位信息,可是还得提供额外的用户、单位增加功能,也就是说在读取用户、单位信息时要将LDAP中的信息与自己增加的用户、单位信息汇合,重新进行树状排列(这个地方采取生成XML树的方式,不知效果如何),与此同时还要判断当前用户的权限,以便控制各节点是否显示(这些节点可能是单位,也可能是个人)。

然后对各个节点显示的信息还得读取控制权限,那些信息可以显示,那些不能显示,另外对各个信息的操作权限也有控制,对某条信息是增、删、改,还是仅仅查看。而对于某条记录的详细信息,又需控制某个字段是否显示,等等等等,如此这般

我的初步构想:
划分功能点:功能模块(不同用户有不同的操作模块,如我们一般程序顶的菜单项,非LDAP和相关信息)、表结构(数据字典表,控制到字段权限时用)
操作(operate):增、删、改、查看
角色:赋功能模块,及相关操作
用户:赋角色
组:赋用户

算了,就说这点吧,我也晕了,现在思路很乱

Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月22日 13:54:05 回复

发表人: iceant 发表文章: 413 / 注册时间: 2002-10
我的感觉是你对需求不明确,建义你回去和客户坐下来谈谈他们想要的东东。你可以把操作的界面画出来,然后问问客户是不是想这样操作,如果不是,怎么改动,最后要一个需求更改说明书(可能要你写,客户签字,这也是对你自己的一种保护!),说明确定下来的需求是什么。

时间: 2024-11-01 21:01:04

对权限控制又很深入的讨论(1)的相关文章

对权限控制又很深入的讨论(2)

控制 Re: 我也请教一个关于权限设计方面的问题 发表时间: 2003年10月24日 16:24:18 回复 发表人: littlebird 发表文章: 1 / 注册时间: 2003-10 看了这么多关于权限方面的讨论真是受益匪浅.这里说说我的想法:我认为对于多数企业应用项目,相对而言都不是很大的项目,权限管理部分是不是可以简化成:user *-->1 role 1-->* operate用户可能有很多组织上的层次关系,但在这里可以将它压平,不论什么层次都直接和角色相关,而且只有一个角色权限也

理解Java访问权限控制_java

今天我们来一起了解一下Java语言中的访问权限控制.在讨论访问权限控制之前,先来讨论一下为何需要访问权限控制.考虑两个场景: 场景1:工程师A编写了一个类ClassA,但是工程师A并不希望ClassA被该应用中其他所用的类都访问到,那么该如何处理? 场景2:如果工程师A编写了一个类ClassA,其中有两个方法fun1.fun2,工程师只想让fun1对外可见,也就是说,如果别的工程师来调用ClassA,只可以调用方法fun1,那么该怎么处理? 此时,访问权限控制便可以起到作用了. 在Java中,提

.NET平台下带权限控制的TreeView控件节点生成算法

treeview|控件|控制|算法 一.引言 在应用系统开发中,TreeView是一种使用频率很高的控件.它的主要特点是能够比较清晰地实现分类.导航.浏览等功能.因而,它的使用方法与编程技巧也一直受到技术人员的关注.随着应用需求的变化,在很多情况下我们需要实现数据显示的权限控制,即用户看到的数据是经过过滤的,或是连续值,或是一些离散的值.就TreeView而言,原先可能显示出来的是完整的具有严格父子关系得节点集,而经权限过滤后所要显示的节点可能会变得离散,不再有完整的继承关系.本文针对这一问题,

Sql Server来龙去脉系列 必须知道的权限控制基础篇

原文:Sql Server来龙去脉系列 必须知道的权限控制基础篇     题外话:最近看到各种吐槽.NET怎么落寞..NET怎么不行了..NET工资低的帖子.我也吐槽一句:一个程序猿的自身价值不是由他选择了哪一门技术来决定,而是由他自身能创造出什么价值来决定.     在进入本篇内容之前,这里有几个问题:     1.一般程序猿都知道怎样创建.修改.登录账号,但知不知道登陆账号存储在哪个表或者视图?     2.数据库中其实存在登录账号和用户两个概念,你能解释清楚这两个概念吗?     3.对于

权限控制要怎么做呢。。

问题描述 我现在只是一个小的BBS项目,怎么自己写代码来控制权限呢(可以通过springsecurity来控制权限,不过现在不想去搞那个,那个打算以后去研究),想通过资源,角色,用户他们来管理,它们之间的关系我懂,只是资源这部份怎么写呢?最好能贴出点代码 解决方案 解决方案二:详细的一大堆.我给你比较流行的表结构巴.解决方案三:CREATETABLE`systemprivilege`(`model`varchar(255)NOTNULL,`privilegeValue`varchar(255)N

AOP下的权限控制实现

OOP应用开发面临的问题 面向对象技术很好地解决了软件系统中角色划分的问题.借助于面向对象的分析.设计和实现技术,开发者可以将问题领域的"名词"转换成软件系统中的对象,从而很自然地完成从问题到软件的转换. 但是,问题领域的某些需求却偏偏不是用这样的"名词"来描述的.比如遇到这样的问题:需要对系统中的某些方法进行权限检验,这种需要权限检验的方法散布在40多个类中.面对这种需求,应该怎么办呢?最直接的办法就是:创建一个起类(或接口),将权限检验的功能放在其中,并让所有需

Acegi + Spring + Hibernate + Struts 2搭建基于角色的权限控制

安全永远是WEB应用系统必须面对的头等大事, 也是最头疼的事, 其实安全系统就只包括两个问题: 认证和授权. 以前做些网站系统, 安全检测逻辑都在放在须要安全控制的代码前面, 这样做有很多不好的地方, 重复多次的编码就不用说了, 代码移植性, 重用性都得不到体现, 安全检测逻辑要永远和业务逻辑放在一起. 那么, 能不能够在进入方法前就调用一些安全检测? 其实Spring AOP就是这个思想, 那么又如何实现安全检测呢? Spring Acegi Security 框架就是做这个事情. 本文主要是

Spring Boot 之 RESRful API 权限控制

一.为何用RESTful API 1.1 RESTful是什么? RESTful(Representational State Transfer)架构风格,是一个Web自身的架构风格,底层主要基于HTTP协议(ps:提出者就是HTTP协议的作者),是分布式应用架构的伟大实践理论.RESTful架构是无状态的,表现为请求-响应的形式,有别于基于Bower的SessionId不同.   1.2理解REST有五点: 1.资源  2.资源的表述  3.状态的转移  4.统一接口  5.超文本驱动 需要理

解决SELinux对网站目录权限控制的不当的问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/831098 前言:本文主要介绍了因为SELinux对网站目录权限控制的不当而引起网站无法正常操作和访问的问题. 正文开始:今天下午闲着没有事做于是突然兴起想尝试安装下Drupal.以前用Wordpress做博客久了,总想着尝尝新. 按照Installtion Guide提示的安装步骤进行操作如下: wget http