我的"框架"之"权限设置"

 

1引言

1.1目的

在管理类软件中,权限的作用非常重要。例:CRM(客户资源管理)软件中,假设有两个销售部门AB,分别由经理a和经理b管理,要求a的权限可以查看AB两个部门的客户信息,而b的权限却仅要求查看b部门的信息,这就需要对ab进行权限分配,因为他们有所不同,假设两个经理的权限完全一致,又如何做到快速的设置呢?

1.2开发环境

采用微软Windows系统列操作系统即可,本人采用的是XP系统

1.3开发工具

Windows环境下,开发数据库的编程工具众多,其中,最突出的是微软公司的Net产品,尤以C#.2005为突出工具,在经过市场分析后,我们最终选择了微软的产品,采用C#.2005开发,数据库选择SQLServer2000SQLServer2005

1.4适用范围

部分行业的中小型企业,支持CS结构软件。BS结构很少做过,不是完全支持。大型和超大型企业的权限设置无法支持。

1.5个人资料

在此处写明个人资料,目的是告诉大家我这篇文档的水平。只是把经验分享给大家,并不是表明我有多牛X

本人05年本科毕业,工作前两年,一直从事ERP实施工作,后来由于与自己兴趣不符,辞职闪人。

074月投身于杭州一家ERP公司,使用PowerBuilder9开发工具开发,由于本人对NET工具有强烈的兴趣,于094月合同到期,没有续约。

虽然没有使用NET工具开发,但我积累了行业管理软件方面的经验,为以后在NET工具上开发管理类软件提供很多启示。

因此,这篇文档主要是在PB工具上得到了验证,在NET工具上还在开发中,没有完全验证。

2功能设计-权限设置

2.1名词解释

2.1.1工作组

简单说,与一般企业的里的部门相似,例采购部门、销售部门等。考虑过直接使用HR(人力资源)模块的部门(也可以叫职能机构)表,但后来考虑到通用性,还是单独再建一张表。不过,考虑到项目不同和企业规模不同,可以将HR的部门表直接拿来使用。

2.1.2角色

       这个名词是我在最近才加上去的,一开始感觉这个没有多大作用,所以就没有在权限设计中加入这个东东。直到最近在博客园浏览贴子的时候,才融入进设计中。

       角色是依附于工作组的,同时还街接着用户。作用是承上启下的作用。

2.1.3操作员

       相信大家都不会对这个名词陌生,没有必要再过多解释。不过,这个操作员和工作组一样,也是独立出来的一张表。不过,考虑到不同的项目和企业规模不同,该表可以与HR模块的人员档案合二为一,个人推荐不要这样设计。

2.1.4权限类别

       把权限分门户别类,可能有些牵强,尤其是在中国,什么事都可能发生。权限类型的划分,我是分为两大类,几小类。

两大类,是指功能权限和数据权限。

       功能权限,就是指新增、修改、删除、保存等产品常用的功能。

       数据权限,这个有些牵强,就是指某些人能看到某些数据,不能看到某些数据,我认为这也是权限的一部门。如果再需要细分的话,可以按窗体的功能划分,如:列表权限、单据权限等

2.1.5权限级别

       工作组,对整个工作组进行设置

       角色,对某一角色进行设置

       用户,对某一用户进行设置

       他们的作用,逐级增强。即:用户的设置优于角色级别,角色的级别优于工作组。

2.1.6模块ID

       这个名词本身是属于“框架”的范畴,因为在此处有所涉及,所以略微表述一下。大家理解为窗体的一个属性就可以了。

2.2设计方案

2.2.1设计思路

功能权限

何为“权限通用”呢,我的理解就是权限的设置不必根据前台是什么,而全部可以通过在后台数据库表或外部文件设置。在前台直接绑定(调用)就可以了。

其实即使我们说做到了“权限通用”也是有一定条件的,是根据某些行业的特点设计的。

还要再说一下前台,无论我们使用WinFormWebForm开发,前台都可以理解为窗体或页面。在窗体或页面,会有菜单、工具栏、若干按钮,状态栏等。我把窗体根据划分为以下几种类型。我以WinForm窗体举例:

列表窗体:

编码列表窗体,公用基础编码,只有新增、修改、删除等几个按钮,功能比较简单,多使用网格控件显示批量数据。可以再加若干TextBox文本框,直接进行编辑等。例:HR模块的部门、民族等

单据列表窗体,整个产品中比较重要的一个窗体,用于显示业务单据,功能比较复杂,即要支持常用功能操作,例:新增、修改、删除等,也要支持个性化操作,如生成XX单据,读取XX单据,总之,功能是千差万别啊。一般使用网格控件只读方式显示数据。例:各种业务单据等

在以上两种窗体中,还可以加入树控件,作用是导航数据。这里的树控件,也有两种功能:显示和分类。“显示”是指网络控件中的数据在树控件里的一个映射。“分类”是指根据网络控件的某一字段值进行过滤。当然,还可以加入其他辅助性控件,来完善列表窗体的功能。

单据窗体

单表单据窗体,就是只有一个表的业务单据,维护起来只需要若干TextBoxComboBoxDateTimePicker等控件。

两表单据窗体,我理解为具有主明细表的业务,多用于库存模块的入库单等。结构要比单表的复杂些。主表采用TextBox等控件绑定,明细表多采用网格控件,难点在于主明细表主键字段的统一、数据库保存(因为是多表,会用于事务)。

多表单据窗体,就是不知道有多个表,这类单据我预测以后会经常遇到。主表采用TextBox等控件绑定,各明细表即可以使用网络显示多条明细,也可以使用TextBox显示单个明细信息。总之,最为复杂。

报表窗体

与列表窗体十分接近,但也有所不同,在此处不过多解释。因为对于权限来说,它是比较简单的,主要包括菜单、工具栏、按钮等

还有一些其他窗体,都是具有特殊用途的,例:登录窗体,Splash窗体等,对于权限的影响不大,就不多说了。

以上窗体,无论功能如何复杂,它们都有通用的地方,比如:具有菜单、工具栏、各种控件(TextBoxDataGridView等)、状态栏。这些控件是我们设计权限的关键。另:在这些窗体的类型上,我们需要定义两个属性:(AuthorID,模块IDWinType,窗体类型),我在后面会介绍

废话了这么多,开始讲“权限通用”的思路。我对权限的理解:就是在某个窗体(或页面)里某种操作状态(新增、修改、删除等)下,是否允许操作员对某一控件或数据进行操作。可能有些抽象,其实我们设计权限,无非是管理一个人对数据的操作,操作就包括功能操作和数据操作了。

前台的窗体中,我以新增操作为例,可能会使用菜单执行新增,可能会使用工具栏新增,可能会采用按钮新增,其实这些使用不同控件的新增,我们如何通用设计呢,我是这样设计的,在后台,我对某个工作组(角色、操作员均可),在某个窗体中,执行新增操作时,赋一个值就可以了。例:对操作员A在窗体B中的新增操作C设置是否可见,是否允许。这条规则(UserAfrmCityListAddIsVisible=1IsEanbled=1),我们在后台存放进一个表里就好了,在前台直接调用下就好了。

可能有人会问:我前台使用的是菜单,我使用的是工具栏里的按钮。如何产生关系呢?其实这样设计就可以,前台的控件,我想大部分公司或个人,都会自己重载一个,而不会从工具箱里直接拖一个使用,怎么说也有个祖先吧。在这些祖先里面,我定义了一个属性AuthName(权限名称),在刚才那条规则的表中,再定义两个字段,用于表是是何种控件和控件名称就行了。然后在前台调用的时候,我们对相关的控件的这AuthName属性赋值就可以了。

有人觉得这种规则设置起来比较麻烦,我又不知道有哪些窗体,这就用到了我在前面的窗体属性AuthorIDWinType,其实我设计这两个字段,就是为所有规则进行定位。例:库存模块的入库单,我可以定义其AuthorID=”SGB01”,列表窗体的WinType=”list”,单据窗体的WinType=”bill”。在定义这类规则时,加上这两个字段就可以了。

还有,这条规则可能是工作组的权限,也可能是角色的,也可能是用户的。我们再加上这个字段就可以了。即:权限类别(AuthLevel)。

通过加上这几个字段,似乎功能权限的方面就设计得差不多了。其实我们还可以再分门别类的划分下,在数据库里多保存几张表,以减轻对数据库的压力。例:工作组列表窗体权限表、工作组单据权限表、角色列表窗体权限表等。然后可以使用视图来统一起来,不统一也可以,直接用也可。

在前台如何调用这些呢?如果你的控件是动态生成的,那么是动态生成的,直接对AuthName属性赋值即可,同时对这个控件进行权限设置即可。

数据权限

数据有什么权限呢?我的理解就是某些人在某些单据中,由于某种原因无法看到某些数据或看到部分数据。

根据上面的思路,我们继续设计,比如最一开始的那个例子,销售部经理a要看到部门AB两个部门的数据,销售部经理b只允许看到部门B的数据。假设我们不设置数据权限,可能ab都能看到AB的数据,没有限制。我对经理b设置了一条数据权限规则,即:对客户数据.部门=’部门B’,然后在经理b加载调用这条数据即可,我给它起了个名字:限制域。(哈哈,可能有看到的朋友要拍砖了,这是盗用我们公司的名词,嘿嘿,我在此只是借用了下,仅此而已,比较形象咯)。简单说,我们可以对任何工作组、角色或操作员、任何窗体设置数据权限,前提是我们需要知道窗体中显示的数据字段信息,不然我们找不到关联关系!将这条信息拼接到加载数据的SqlSelect语法里就可以了,若是列表窗体,建议增加一个窗体属性,因为我们会随时调用它的,比如:用户查询数据时。

2.2.2界面设计

       在前台我们需要定义如下方法

设置控件权限

wf_set_controlauth:遍历adSetControlAuth表,根据AuthorIDWinType找到当前模块ID当前窗体的权限设置,绑定所在的控件,设置控件的AuthName属性,即AuthName=’add’即可。遍历控件,然后在权限表中find一下,如果有权限设置就直接设置即可。如下所示

wf_set_toolbar:只设置工具栏的按钮权限

wf_set_control:只设置TextBoxComboBox等控件的权限

wf_set_datagrid:只设置DataGridView控件的权限

wf_set_statusbar:只设置StatusBar控件的权限

另外,还有一些额外权限,就是窗体中的某些字段值发生变化时,可能会影响到其他控件的权限设置,例:可能会显示,可能会隐藏。这个问题,我会在另一篇贴子中再详细描述。

2.2.3类图设计

2.2.4程序流程

功能权限

 

 

更正下:数据不存在应该直接指向:结束。由于vioso不在公司,先在此注明下。

 

数据权限

 

2.2.7数据结构

功能权限

 

 

作用:    1,区分权限类别,目前只有两条数据:功能权限和数据权限

              2,扩展使用,预留

说明:    1,新增人、新增时间、修改人、修改时间是我参考博客园的贴子,加上去的。不是原创

              2,使用bit字段类型,相当于前台的bool

 

 

作用:    1,区分权限级别,目前包括工作组权限、角色权限和用户权限

              2,扩展使用,预留

 

 

作用:    1,权限的名称,这个表是我最近才加进来的,对以后扩展大有好处。它可以定义有哪些权限,比如:新增、修改、删除等常用权限,也可以自定义设置权限名称。建议最好用名称英文简称进行区分。

 

 

作用:    1,定义工作组级别的列表窗体权限

说明:    1,权限名称与权限名称.名称英文简称字段保持一致

              2,权限操作一般分为允许显示和允许可用。如果有其他操作,可以新建一表,保存起来,便于维护。

 

下面表的表结构与上面基本一致,不再详述

工作组单据窗体权限

工作组其他窗体权限

角色列表窗体权限

角色单据窗体权限

角色其他窗体权限

用户列表窗体权限

用户单据窗体权限

用户其他窗体权限

 

我们可以对上述表做一个视图,其实这些表的作用只有一个,就是当某个用户打开某个窗体,其中的某个控件是否允许显示,允许可用。

 

 

数据权限

 

说明:    1,权限级别,区分工作组、角色、用户

              2,权限对象,具体对象名称

              3,替换控件名称、字段名称和字段类型,主要是用于动态设置使用,因为可能主表的某一字段值过滤明细表的数据

 

说明:表结构晚上回去补上,现在在公司里,没有带过来。不好意思。

2.2.8注意事项

1.整个权限文档还有很多地方没有设置,比如权限如何快速复制,不同用户间的权限调配等,有时间我会慢慢描述的。

3问题讨论

       欢迎大家提出自己的想法,扔砖也可以。

0
0
(请您对文章做出评价)
» 下一篇:我的"框架"之"导航图"

posted on 2009-07-09 10:23 Vincent.Q 阅读(2482) 评论(70)  编辑 收藏 所属分类: 我的框架

评论

#1楼 2009-07-09 10:33 123163      

学习了   回复  引用  查看    

#2楼 2009-07-09 10:39 吉日嘎拉      

花了不少功夫吧?
  回复  引用  查看    

#3楼 2009-07-09 10:42 信博勤恒      

谢谢LZ...学习了!   回复  引用  查看    

#4楼 2009-07-09 11:01 AnsonWu      

介绍的很好,,顶~~   回复  引用  查看    

#5楼 2009-07-09 11:12 蓝色海洋      

受教了!

“功能权限”自己觉得建立在动态菜单上较方便。

“数据权限”自己觉得建立在存储过程与视图上较为安全。
  回复  引用  查看    

#6楼 2009-07-09 11:13 凡客诚品哦[未注册用户]

不错哦   回复  引用    

#7楼[楼主] 2009-07-09 11:24 Vincent.Q      

@蓝色海洋
"功能权限"可以这样处理滴,也是我推荐的一种方法,呵呵。因为单据窗体的菜单或工具栏可以动态创建,在创建过程中就直接设置权限(显示,可用)就OK了,个人觉得比较简单,不过,菜单的事件要自己委托哦!还有一种方法,就是窗体里的窗体是预先创建好的,这个比较简单,我们只要遍历每个控件就好了。
另:哪些TextBox,ComboBox控件就不要动态加了,个人感觉比较麻烦,而且还要委托里面的事件,两字:麻烦!
"数据权限"我建议还是采用拼Sql语句方式实现,原因是Sql比较通用,在各大数据库之前转换比较方便。存储过程的话,可能在切换数据库的时候。。。。
  回复  引用  查看    

#8楼 2009-07-09 11:26 蓝色海洋      

个人心得:

按照: 权限-功能-窗体

这样设计,逻辑清楚便于维护,代码量稍大。

而不要: 窗体-功能-权限

这样设计,相关太紧不便维护,受通用思维影响。

  回复  引用  查看    

#9楼 2009-07-09 11:48 吉日嘎拉      

下次空时,我找你进行思路整合,
把2个人的优点都整合一下,我去找你。
  回复  引用  查看    

#10楼 2009-07-09 12:06 jyk

吉日嘎拉又来了,别的我也不说了,只是给lz一个建议:

不要被宰了,更不要被骗了,呵呵。

害人之心不可有,防人之心不可无嘛,呵呵。


================

对lz说一句,我感觉我们的思路基本一致,只是实现方式不太一样。

  回复  引用    

#11楼 2009-07-09 12:10 asfdaf asfd as [未注册用户]

引用jyk:
吉日嘎拉又来了,别的我也不说了,只是给lz一个建议:

不要被宰了,更不要被骗了,呵呵。

害人之心不可有,防人之心不可无嘛,呵呵。


这回我要支持jyk了。
  回复  引用    

#12楼[楼主] 2009-07-09 12:27 Vincent.Q      

@蓝色海洋
本人同意"权限-功能-窗体"这种设计思路。
后台的权限表中,要有与前台窗体挂勾的东西吧,起码要知道,前台的窗体需要哪些权限是不?
  回复  引用  查看    

#13楼[楼主] 2009-07-09 12:33 Vincent.Q      

这里插播一条我朋友的评论,我觉得不错
看法:
1.角色和工作组,差不多意思,保留一个即可
2.除了功能权限,数据权限,还有模块权限
3.通用只是一个基础,还有很多是不能通用的,比如,组织权限,项目权限,进度权限,工序权限,仓库权限等等,都跟具体业务有关,有些企业用到有些企业用不到,当然这些理论上都可以用限制域实现,不过实施过程会很痛苦
4.限制域我觉得不如叫数据域

回复:
1,角色和工作组,功能很相似,适用于中型规模的企业。"角色"这一色可以根据企业的规模不同而决定是否保留
2,模块权限,这个也是一个权限,我会有:我的"框架"之"导航图"中有所说明。因此,这里没有描述
3,像组织权限,项目权限等都是和某些行业关系比较密切的,我没有在此处表明。是因为,我所涉及的行业里暂时没有这些,呵呵
4,"数据域"这个名字似乎比我那个更贴切些,呵呵!
  回复  引用  查看    

#14楼 2009-07-09 12:39 金色海洋(jyk)      

1、我倒是觉得“角色”是要有的,而工作组可以根据需要选择是否使用,呵呵。

2、通用的那么就“通用”处理,特殊的那么就特殊处理。

3、其实对于关系型数据库的项目,最重要的就是SQL语句,当然前提是设计好数据库,呵呵。

是否可以出个Demo呢?
  回复  引用  查看    

#15楼 2009-07-09 12:54 蓝色海洋      

在一个项目开发中,通用或兼容的想法是非常危险的,也是初入此道的人非常崇尚的。

从功能面上讲,权限是客户需求的分类,是窗体建立的依据。
从数据面上讲,权限是从属于功能层面的,是数据对象建立的依据。
权限表只是这种应用的实现。

角色是否需要,得看具体的应用,不可一并而论。
  回复  引用  查看    

#16楼 2009-07-09 13:04 蓝色海洋      

引用Vincent.Q:
@蓝色海洋
本人同意"权限-功能-窗体"这种设计思路。
后台的权限表中,要有与前台窗体挂勾的东西吧,起码要知道,前台的窗体需要哪些权限是不?

不是窗体需要那些权限,而是这些窗体从属于哪些权限。

你可能还是没有理解 权限-功能-窗体 这个设计思路。
  回复  引用  查看    

#17楼 2009-07-09 13:44 金色海洋(jyk)      

窗体就好像一个房间,本身就有一定的功能。

权限就好像房间大门的门锁,而且是锁上的。

角色可以理解为是一把钥匙,可以打开门锁的钥匙。准确的说,角色是钥匙的集合。


那么开发商在盖大楼前,会根据住户的普遍需求和自己的利益,想设计图纸的人提出需求,然后得到图纸。

有了图纸就可以找建筑队来盖房子了。

房子可以是一室一厅一卫,也可以是两室一厅一卫,也可以是其他的组合。

每一个“室”都可以上锁,大门也会有一把锁。单元门也会有一把锁。

然后就是分配房间,也就是分配钥匙了。

整理一下:需求——盖房子——业主选择房子、业主分配钥匙。

也就是:需求——窗体——客户老总(或者叫做管理员吧)分配哪些人可以用哪些功能(窗体)。


需求——窗体——角色。

  回复  引用  查看    

#18楼 2009-07-09 14:13 别爱上哥,哥只是个传说!      

RBAC   回复  引用  查看    

#19楼 2009-07-09 14:48 xmanx[未注册用户]

可以参考下FortuneBase里面的权限模型
参考地址www.cnblogs.com/mail-ricklee
  回复  引用    

#20楼 2009-07-09 14:49 阿幸      


权限设置管理
应用权限
基权,功能,为基础,扩展角色
数据权限
在应用权限基础上定制数据

可以通过在权限设置管理的基础上可以有不同的实现
如:在Web控制,在权限设置管理基础上架一套关系Web窗体对控件的控制处理,如设置相应的禁用,隐藏等
还可以实现一套如标记的权限控制
[Role("角色")]
public void Search{...}
在Winform中同样可以定制一些自己的框架
具体使用的Web或WinForm只是表现形式不能但是权限设置是一样的
尽量降低藕合度。
  回复  引用  查看    

#21楼 2009-07-09 15:16 BugLiu      

分享一下俺的思路,绝对通俗易懂

http://www.cnblogs.com/BugLiu/archive/2009/07/03/1516215.html
  回复  引用  查看    

#22楼 2009-07-09 15:44 蓝色海洋      

我还是重申一下自己的观点:

根据客户的需求,归纳出不同的权限;依据不同的权限,抽象出相应的功能;最后,根据不同的功能来设计窗体。
  回复  引用  查看    

#23楼 2009-07-09 16:01 蓝色海洋      

我与金色海洋认识上的异同:

金色海洋的观点是:造好房子(窗体),按客户要求(权限)分配。

蓝色海洋的观点是:按客户要求(权限)来造房子(窗体)。
  回复  引用  查看    

#24楼 2009-07-09 16:28 金色海洋(jyk)      

其实观点差不多,呵呵。

我的观点是:客户提出需求、按照需求盖房子、房子盖好后交给客户、客户的老板分配房子。

当然了,我们改出来的房子要达到可以让客户的老板随心所欲的去分配的程度,也就是“切成小片”。



我也一直在整理自己的思路,想把自己的思路说明白,但是好像一直都没有理顺出来。

想用下面这个例子来说,但是再往下面,我也没有想好要怎么说。

==================================

还是用宾馆来举例子吧。

某大款要开一个宾馆,

他先找设计师设计了一个宾馆大楼的设计图纸

然后找施工队,盖大楼。

宾馆改好了之后呢,有单人间、双人间、总统套房等。

到这里为止呢,根本就没有涉及到权限的问题,所有的房间都归老板所有,他有钥匙,其他人都没有钥匙,无法进入任何一个房间。

  回复  引用  查看    

#25楼 2009-07-09 16:50 蓝色海洋      

金色海洋,我觉得我们应当换个角度来看问题。

设计宾馆时要有:警卫室、地下车库、餐厅、洗衣房、酒吧、歌舞厅等等,这都依据客户需求(权限)来做的。如果,客户说不需要酒吧,那设计师也就不会设计了。

我想说的是:不是等宾馆完工后,由老板来分配钥匙(账号),来分配权限;而是在设计宾馆时,就将使用权限设计好了(这点理解至关重要)。

“账号不代表权限,它只是权限管理的一种手段!”
  回复  引用  查看    

#26楼 2009-07-09 16:51 淘者天下2      

http://framework.supesoft.com/   回复  引用  查看    

#27楼 2009-07-09 16:52 淘者天下2      

ASP.NET权限管理系统(FrameWork)   回复  引用  查看    

#28楼 2009-07-09 17:22 金色海洋(jyk)      

不管你弄什么,门上都有一把锁吧,

锁头是负责锁住东西的,而角色就是开锁的钥匙。

我只关注锁头和钥匙。至于有没有警卫室、酒吧、歌舞厅,只要有对应的锁头和钥匙就可以了。

设计宾馆的时候,只需要考虑功能就可以了,和权限有什么关系呢?

难道在设计宾馆的时候就要考虑谁可以用什么,谁不可以用什么?

除了宾馆老板是确定的,还有哪些是确定的呢?可能老板也没有确定下来呢。


借用lz的宝地,讨论一下,没有别的意思。呵呵。

  回复  引用  查看    

#29楼 2009-07-09 17:26 金色海洋(jyk)      

我说的钥匙可不是账号,而是 角色 。
老板还可以自己建立角色。

而权限是锁头,锁住房门的锁头,这个当然是要在设计的时候加上的。

设计的时候只需要加上锁头,而不用考虑钥匙会给谁。
  回复  引用  查看    

#30楼[楼主] 2009-07-09 17:26 Vincent.Q      

@金色海洋(jyk)
呵呵,没关系咯,欢迎欢迎啊.
下午一直在忙,晚上有时间我也一起讨论下
  回复  引用  查看    

#31楼 2009-07-09 17:36 蓝色海洋      

金色海洋

当然是在设计时就考虑谁可以用什么,谁不可以用什么!

警卫室就是给警卫用的,餐厅就是给用餐人用的,不是老板随意定的。

你那个锁头,只相当于账号。
  回复  引用  查看    

#32楼 2009-07-09 18:43 金色海洋(jyk)      

我可不想那么死板,难道餐厅不能改成舞厅吗?呵呵。

等等,我是说,谁来当警卫,谁来当餐厅的经理,那都是老板说的算的(或者老板把这个权力下放给人事部的经理,当然谁来当人事部的经理也是老板说的算的)。至少盖餐厅的是说了不算的。



  回复  引用  查看    

#33楼 2009-07-09 19:27 蓝色海洋      

金色海洋:

有点远离话题。

如果在项目完成后,需要将餐厅改成舞厅,那整个架构就失败了。

至于,谁当警卫的问题,那不是权限的设置的问题,而是授权给什么人使用该权限的事。(请注意:这两者不是一回事)

  回复  引用  查看    

#34楼 2009-07-09 20:57 金色海洋(jyk)      

授权给什么人使用该权限 这个不就是角色吗?也可以叫做工作组。

用我的话说,就是钥匙,呵呵。

===========

警卫,如果我是警卫,那么我就可以使用警卫室,如果我不是警卫,那么我就不可以使用警卫室。

那么我是不是可以理解成,和岗位挂钩了呢? 警卫是一种岗位。

另外,我是不是警卫由谁来定呢?

警卫室的用处我们是比较了解的了,那么如果遇到专业性很强的呢?

我们需要知道我们做出来的某个功能点是由谁来使用吗?

举个例子,您知道“内勤”、“外勤”是负责什么的吗?

===========

那个确实是有点远了,所以我用了“等等”。

不过也没太远,这种变动是很常见的。比如大厦里的写字间(商住两用的),每个写字间都是一样的,但是有些人把写字间当成办公室、客厅、会议室、活动室、健身房、机房,有些人把写字间开成了足疗屋。有些人当作住宅来用,还会有其他的用处。呵呵。

盖大厦(设计大厦)的可能都想不到写字间会有这些用处。

  回复  引用  查看    

#35楼 2009-07-09 21:06 蓝色海洋      

LZ:

我设计权限的做法是:一种权限下的一种功能,对应一个窗体。

象你举的A经理与B经理的问题,我会这样处理:

如果系统检测到的是A经理的登录账号,就返回一个窗体,窗体上的菜单中,即有A部门的数据选项,也有B部门的数据选项。

如果系统检测到的是B经理的登录账号,就返回一个窗体,窗体上的菜单中,只有B部门的数据选项。

尽量避免在同一个窗体中,采取禁用某些控件的方法,来适用于不同的权限。这将给后期的升级和维护带来麻烦。
  回复  引用  查看    

#36楼 2009-07-09 21:20 蓝色海洋      

金色海洋,刚才写帖子时候没有看到你的接贴。

授权给什么人使用该权限不是角色!

设置权限和通过账号给客户端的使用者授权,根本是两回事。如果这个问题搞不清楚,那角色的问题更没法说了。

我觉得你始终没有搞清楚,设置角色、设置权限、通过账号来授权,这三者的内涵究竟是什么。

  回复  引用  查看    

#37楼[楼主] 2009-07-09 22:37 Vincent.Q      

@金色海洋(jyk)
回复14楼的问题
demo其实是有的,不过是PB的,嘿嘿,估计大家没听过的居多。。。所以暂时就先不公布了,NET的demo在写呢。不过,如果有需要的,可以与我联系,私下给你,唉,实在不好意思把pb代码放上。
  回复  引用  查看    

#38楼[楼主] 2009-07-09 22:42 Vincent.Q      

@别爱上哥,哥只是个传说!
精辟,佩服!
  回复  引用  查看    

#39楼[楼主] 2009-07-09 22:45 Vincent.Q      

引用蓝色海洋:
我与金色海洋认识上的异同:

金色海洋的观点是:造好房子(窗体),按客户要求(权限)分配。

蓝色海洋的观点是:按客户要求(权限)来造房子(窗体)。


我同意金色海洋的观点,如果按照蓝色海洋的观点,如果客户没有权限,是不是就没有窗体呢?
附带调侃下:两位是不是哥俩啊,呵呵!   回复  引用  查看    

#40楼[楼主] 2009-07-09 22:50 Vincent.Q      

@BugLiu
已拜读,不错咯。
我的权限主要是基于cs结构,偏于ERP软件,比bs的结构要复杂点。
可以与阁下一起交流下bs的权限
  回复  引用  查看    

#41楼[楼主] 2009-07-09 22:54 Vincent.Q      

引用蓝色海洋:
LZ:

我设计权限的做法是:一种权限下的一种功能,对应一个窗体。

象你举的A经理与B经理的问题,我会这样处理:

如果系统检测到的是A经理的登录账号,就返回一个窗体,窗体上的菜单中,即有A部门的数据选项,也有B部门的数据选项。

如果系统检测到的是B经理的登录账号,就返回一个窗体,窗体上的菜单中,只有B部门的数据选项。

尽量避免在同一个窗体中,采取禁用某些控件的方法,来适用于不同的权限。这将给后期的升级和维护带来麻烦。


问:A经理的账号和B经理的账号,他们返回的是一个窗体吗?如果不是的话,在窗体复用性方面就比较差喽!如果是的话,是不是可以说,权限决定(是决定,不是创造)窗体的数据?   回复  引用  查看    

#42楼[楼主] 2009-07-09 23:00 Vincent.Q      

谢谢大家在这里的讨论,我会继续跟贴中。。。
另:我会尽快做个net的demo出来,供大家下载。先声明下啊,由于本人经常加班,所以。。。时间不确定。

我还有其他一些贴子,会陆续发上来,再次欢迎大家的讨论!
  回复  引用  查看    

#43楼[楼主] 2009-07-09 23:11 Vincent.Q      

表结构附上,由于不清楚如果直接上传,所以在此处贴个地址了,
是图片形式。http://www.cnblogs.com/Vincenet/gallery/image/77334.html
  回复  引用  查看    

#44楼 2009-07-10 07:25 蓝色海洋      

一并回楼主

对于没有权限的客户,应当只能看到登录窗体。如确有需要,也可以建立类似 Guests 的公共账号。

A经理和B经理可以共用一个窗体,但要动态地建立菜单;也可以分开建立两个窗体。但我认为,不要刻意面地追求复用性,而有损程序的可维护性。

最好做到窗体上所有的对象,都属于同一个权限。

你也不要以PB感到不好意思,关键是编程思想。PB做的很多东西,目前ASP.net是做不出来的。

我与金色海洋并不认识!我只看过几次大海,但每次都非常的震撼。小时经常爱唱:我爱这蓝色的海洋......
我们国家已经开始走向深蓝了!
  回复  引用  查看    

#45楼 2009-07-10 07:55 金色海洋(jyk)      

引用蓝色海洋:
金色海洋,刚才写帖子时候没有看到你的接贴。

授权给什么人使用该权限不是角色!

设置权限和通过账号给客户端的使用者授权,根本是两回事。如果这个问题搞不清楚,那角色的问题更没法说了。

我觉得你始终没有搞清楚,设置角色、设置权限、通过账号来授权,这三者的内涵究竟是什么。



设置角色、设置权限、通过账号来授权

我确实不是太清楚,目前的理解是:

权限的集合就是角色,帐号是人员的一个别名,帐号通过角色与权限发生联系。

“通过账号来授权”,这个我确实没有理解,在我的项目里没有这种方式,呵呵。

比如guest 帐号,在我的项目里只可能有guest角色,而不可能有guest帐号。除非是做一个Demo,方便大家体验的时候才可能有guest 帐号。

======

我对帐号的理解:一个帐号只能给一个人使用,超级管理员帐号也只是在开始的时候做一些设置的时候使用,稳定了之后就应该“封存”。

建立一般的“管理员角色”来使用。



  回复  引用  查看    

#46楼[楼主] 2009-07-10 08:37 Vincent.Q      

引用蓝色海洋:
一并回楼主

对于没有权限的客户,应当只能看到登录窗体。如确有需要,也可以建立类似 Guests 的公共账号。

A经理和B经理可以共用一个窗体,但要动态地建立菜单;也可以分开建立两个窗体。但我认为,不要刻意面地追求复用性,而有损程序的可维护性。

最好做到窗体上所有的对象,都属于同一个权限。

你也不要以PB感到不好意思,关键是编程思想。PB做的很多东西,目前ASP.net是做不出来的。

我与金色海洋并不认识!我只看过几次大海,但每次都非常的震撼。小时经常爱唱:我爱这蓝色的海洋......
我们国家已经开始走向深蓝了!



对于没有权限的客户,应当只能看到登录窗体。
这个不是太好吧,偶觉得.因为有的时候,没有权限就表示不限制客户使用,所有的窗体,不论是什么用户进入,看到的权限,使用的功能,都是一样滴.就是和权限没有任何关系.
如果这样,再需要设置或注册权限的话,就比较麻烦了吧!   回复  引用  查看    

#47楼 2009-07-10 08:44 蓝色海洋      

金色海洋

还是举个例子吧。

在图书馆的系统中,借书证就是权限应用的典型例子。

如借书证按权限分:文学艺术类、医学类、工程类、文史类等等。在每个权限下,都预设了n个账号,供读者申请使用(就象银行中的存折、卡一样,账号提前设好;当然,也有象我们园子注册时,自己填写账号的做法)。

这是一种对预设账号先行授权的做法;还有一种是对预设账号不设权限,只有待用户申请时,才根据申请者的用途,给予授权。

假如,你申请到了工程类的借书证,证上有一个隶属于工程类权限的账号,通过这个账号(得到了授权),你就只可以借阅工程类的书籍。

在管理型的项目开发中,权限象是一个纲,所有的对象,都是靠这个纲来组织的。

希望你不要想角色问题,先把权限、账号、授权搞清楚,才好讨论后面的问题。
  回复  引用  查看    

#48楼 2009-07-10 08:49 蓝色海洋      

楼主:

在ERP系统中,不存在没有权限的客户,就是公共权限,也是一种最低的权限。

你的逻辑出问题了!如果没有权限可以任意操作,那有权限的客户又该做什么呢?
  回复  引用  查看    

#49楼[楼主] 2009-07-10 09:26 Vincent.Q      

@蓝色海洋
这个权限设置,不一定要用于ERP软件哦,尽管我是做ERP软件.
比如一个小企业或者私人找我做个软件,他们对权限的要求不高吧,但窗体要有的吧,是不?
  回复  引用  查看    

#50楼 2009-07-10 09:37 金色海洋(jyk)      

图书馆的例子

其实图书证的种类就是权限的集合,也就是角色。既然你不想过早的谈论角色,那我就先不用角色这个词了。


========

我发现我们的分歧了,我是以生产借书证的角度来考虑的,而您确实以图书馆的管理者的角度来考虑的。

我不想去操心如何管理好图书馆,借书证有哪些种类?借书证号的规则如何制定,借书证又如何去分类,那是图书馆的管理人员去思考的问题。

而我呢,就是生产借书证的,按照要求把借书证制作出来就可以了。

了解行业规则是应该的,但是并不是需要我们操心的。
  回复  引用  查看    

#51楼 2009-07-10 10:09 蓝色海洋      

引用Vincent.Q:
@蓝色海洋
这个权限设置,不一定要用于ERP软件哦,尽管我是做ERP软件.
比如一个小企业或者私人找我做个软件,他们对权限的要求不高吧,但窗体要有的吧,是不?

确实如此!象信息类的网站,就不要什么权限。

在C/S上的小型项目,按功能分解做成模块,也不需要权限。如:一个客户端上,只有一个打印模块,或一个录入模块,用的也挺好。
  回复  引用  查看    

#52楼 2009-07-10 10:21 蓝色海洋      

金色海洋

图书证的种类不是权限的集合,更不是角色!

如果你只生产借书证,那就是我所说的后设权限账号的做法。

我想了解一下,你是否真的理解账号与授权的关系,请你举一个我们大家生活中都知道的例子(后设权限的账号)。

  回复  引用  查看    

#53楼[楼主] 2009-07-10 10:36 Vincent.Q      

其实我们设计权限啊,无非是让产品来使用,作用是根据不同的工作组、角色或用户,来显示不同的功能和数据。
如果我们不需要限制这些功能和数据呢?权限也就不存在了。
我们讨论的是需要权限的软件,这篇文档我会时时更新的,会根据网友们的评论及时修改。
另一篇贴子,我的"框架"之"导航图"快完成了,这周末家里装宽带,应该可以上贴上来。那篇贴子和这个有些关联。
  回复  引用  查看    

#54楼[楼主] 2009-07-10 10:37 Vincent.Q      

其实我们设计权限啊,无非是让产品来使用,作用是根据不同的工作组、角色或用户,来显示不同的功能和数据。
如果我们不需要限制这些功能和数据呢?权限也就不存在了。
我们讨论的是需要权限的软件,这篇文档我会时时更新的,会根据网友们的评论及时修改。
另一篇贴子,我的"框架"之"导航图"快完成了,这周末家里装宽带,应该可以上贴上来。那篇贴子和这个有些关联。
  回复  引用  查看    

#55楼 2009-07-10 10:51 蓝色海洋      

楼主、金色海洋

这个话题也该结了!

我看楼主老是说工作组、角色、权限、用户、功能、窗体、数据什么的,感觉楼主也不是十分的清楚。

金色海洋也是如此。

我最后拿现实中大家都知道的一个实例来说明:

电话或手机就是生活中一个非常好的例子。

号码就是预设账号,我们申请的业务,就是申请某个权限(或者说授权),“套餐”就是角色的典型应用。

  回复  引用  查看    

#56楼 2009-07-10 11:42 金色海洋(jyk)      

相对论,呵呵。

后设置权限,那也要看是针对谁来说的呀?


套餐不是功能的集合吗?比如我用的移动的动感地带,接听免费,130条免费短信,10MGPRS流量。

这些不都是我拥有的功能吗?也可以说是权限呀,130条以内的短信是免费的,超出了就要收费。

套餐不是权限的集合吗?


我也同意结束这个话题。我不知道,我提出来的我们之间的分歧您是否认同。


=============

后设置权限的例子也好举,就用移动来举例子吧。

如果我选择的是神州行,那么我还想发一大堆的短信,那么我就可以申请一个。。。。。。不要意思忘记叫什么了,就是说申请之后,神州行发短信就可以优惠一点。

这个时候手机号是没有变的,也没有多出来一个手机号。但是享受的功能却比单纯的神州行要多了一些。

这个算不算后设置权限呢?或者叫做补充权限?

  回复  引用  查看    

#57楼[楼主] 2009-07-10 11:50 Vincent.Q      

后置权限,我把它归纳进行业相关的业务权限了,这就另当别论喽.以我的"框架"来说,我会把它写在纯行业业务层里,而不是写到这里.当然,我会预留好接口滴.

我的主站地址可能会发生变化,最后的地址还没有确定下来.
给各位带来不便,非常抱歉
  回复  引用  查看    

#58楼 2009-07-10 11:57 蓝色海洋      

金色海洋

“套餐”是权限的集合,也就是角色的内涵。

没有权限的账号是没有意义的!

无论账号的先置权限、后置权限、或调整权限,都是可行的。

对于安全要求极其严格的应用中,账号的权限是不可以改变的。(如核弹的引爆。哈 哈)

再举一个例子:

在数字有线电视中的,我们可以订制节目包,也是角色的具体应用。
  回复  引用  查看    

#59楼[楼主] 2009-07-10 13:35 Vincent.Q      

本博客主页地址正式变更为.
http://www.cnblogs.com/xiyang1011/
给您带来不便,敬请谅解.
  回复  引用  查看    

#60楼 2009-07-10 21:46 金色海洋(jyk)      

我早就说了,角色就是权限的集合,我还以为蓝色兄不同意呢。

我都被弄晕了,哈哈。

只是我习惯在账号和权限之间加上一个“角色”,这样更方便一些。
  回复  引用  查看    

#61楼 2009-07-11 07:25 蓝色海洋      

金色海洋,你说的非常对!

如果角色是一张表,权限也是一张表,那它们就是一对多的关系。

如果,账号也是一张表,那你能说出它和前两张表是什么关系吗?
  回复  引用  查看    

#62楼[楼主] 2009-07-11 22:47 Vincent.Q      

账号表和权限表也是一对多的关系
账号表和角色表的话,应该是多对一的关系
  回复  引用  查看    

#63楼 2009-07-12 07:42 蓝色海洋      

楼主:

权限为一,指向角色的多;
角色为一,指向账号的多。

如果使用了角色这个对象,那所有权限最好都要通过角色来向账号授权,哪怕权限与角色是一对一的关系。

用你的例子:

A经理享有A部门角色中的权限和B部门角色中的权限;
B经理只享有B部门角色中的权限。


  回复  引用  查看    

#64楼 2009-07-21 15:08 个人知识管理      

贴子会很快被人遗忘的,
最后一次:2009-07-12 07:42
今天是:07-20
好东西如何被有需要的人找到呢?
  回复  引用  查看    

#65楼[楼主] 2009-07-21 15:51 Vincent.Q      

@个人知识管理
那就只有主动出击喽,呵呵.
中国有句俗话:酒香不怕巷子深.这句话在今日的中国,已经不再适应了.这叫坐以待毙,兵家之在忌!
  回复  引用  查看    

#66楼 2009-07-24 10:05 蓝色海洋      

楼主你好!

吉日嘎拉的权限设计文章已经出了两篇,不知你看了没有,我想听听你的看法?

http://www.cnblogs.com/jirigala/archive/2009/07/20/1527327.html
  回复  引用  查看    

#67楼[楼主] 2009-07-24 13:33 Vincent.Q      

@蓝色海洋
还没,最近加班比较忙...
周末时候看下咯
  回复  引用  查看    

#68楼 2009-08-26 10:55 彦斌      

楼主.你后面给的那个表结构地址.现在打不开了.

"数据权限"我建议还是采用拼Sql语句方式实现
对客户数据.部门=’部门B’
------------------------------------------
你这个有后续的demo吗?
  回复  引用  查看    

#69楼[楼主] 2009-08-26 22:51 Vincent.Q      

@彦斌
不好意思,才看到.表结构地址已发生变化,发第一篇贴子后,我的地址发生变化,用现在的地址直接链过去,可以看到的.
这个系列的东东,最后会有一个demo的,谢谢
  回复  引用  查看    

#70楼 2010-03-19 00:42 徐培华      

不知道通用不通用
比如说mes系统
  回复  引用  查看    

导航

公告

<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

统计

搜索

 
 

常用链接

我的标签

随笔分类(19)

随笔档案(20)

相册

皮肤护理及形象指导

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜