【自然框架】之通用权限(外传):杂谈

 

 

1、 简介、数据库的总体结构
2、 介绍人员表组
3、 介绍组织结构表组
4、 介绍角色表组
5、 介绍“项目自我描述表组”
6、 权限到节点
7、 权限到按钮
8、 权限到列表(表单、查询)
9、 权限的验证
10、 资源方面的权限
11、 角色管理的程序(给客户用的)
12、 权限下放
13、 个性化设置

 

      写到第六章终于迎来了热烈的讨论,不过讨论的焦点好像和角色的关系不是很大。第一个焦点是数据库的设计是否符合三范式。这个我承认,确实不符合。这个我都有点不敢往下写了,看一下表结构,Role_Role  -> FunctionIDs ,Role_RoleButton ->ButtonIDs ,Role_RoleColumn -> ColumnIDs,Role_RoleResource -> ControlCaseIDs,四个表都有这种设计。如果要改的话,那么我就需要再增加三个表,Oracle用四个表就搞定了,而我这一增加就加了三个。本来就有人说我的表多了,又要加上三个,我可如何是好?你说我能不郁闷吗?哎,怎么又带情绪了,什么时候能改呢?

      第二个焦点是“拒绝角色”。以前大家都没有听说过,顶多听说过拒绝操作。好像大家都不接受。

      因为我不是直接给用户设置操作权限,而是通过角色来间接实现的。所以我也不能直接把拒绝操作设置给用户。

      如果说“可以操作”的集合叫做角色的话,那么“拒绝操作”的集合应该叫什么呢?我给起的名字就是“拒绝角色”。大家好像不太接受,那么我想请大家帮个忙,看看“拒绝操作”的集合应该叫什么好?

      我想改一个大家能接受的名字就可以了吧。

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

      好像写了这么多并没有给大家一个总体的印象,那我就尝试通过一个小故事来说一下吧。讲理论我实在是不在行,咱讲例子吧。

      比如一家牛肉面馆,主要卖牛肉面,老板为了让牛肉面的口感更好一些,提供了四种配料:香菜、葱花、辣椒油、醋。老板觉得这四个都没什么特别的,就告诉大厨,每一样都放进去一点。这样就是一个“牛肉面 + 四种配料”的方案。

      开张之后来了四位顾客,看了牛肉面的介绍后开始点餐。他们要了四份牛肉面,第一份不要葱花,第二份不要香菜,第三份不要辣椒油,第四份不要醋。因为每个人的口味都不一样,也可能会有忌口的。那么提出这样的要求也没有什么。老板一想,客户虽然挑剔了一点,但是也没什么的。于是就告诉大厨客户的需求。

      于是配料方案就变成了这样。
 

 

      这里的不放香菜,就是一种“拒绝”,在原有的配料方案的基础上,去掉某一种配料,而形成一种新的配料方案。就是说你放了其他的我都不管,只要不放香菜就行。 用“拒绝”的方式,有时候表述起来比较清楚。如果上面客户的需求不用拒绝的方式来说,就会有些啰嗦。来四份牛肉面,第一份放香菜、辣椒油、醋,第二份放葱花、辣椒油、醋,第三份放香菜、葱花、醋,第四份放香菜、葱花、辣椒油。这样子一口气说出来,恐怕服务员就记不住了,当然也可能服务员的记忆能力很强能够记住。但是还是很啰嗦。

      当然了,并不是所有的情况都适合使用拒绝的情况,比如下面的四位顾客。

又来了四位顾客,也是点了四份牛肉面,第一份只放香菜,第二份只放葱花,第三份只放辣椒油,第四份只放醋。老板想呀,今天是什么了,怎么客户都是这样呢。但是没办法,客户就是上帝呀。于是吩咐大厨照做。

      这样的配料方案就是:
 

 

      这个就是组合,把公用的拿出来,然后把特殊的单独列出来,最后根据不同的人的需求,选择适合的组合在一起。

      两个图和在一起
 

 

      这回老板想了,这下没问题了吧。可是又来了四位顾客。也是要了四份牛肉面,第一份只放香菜和辣椒油,第二份只放辣椒油和醋,第三份只放葱花和醋,第四份只放辣椒油和葱花。这回老板哭了。这客户也太难答对了呀。忽然老板急中生智,奔向厨房,告诉大厨,以后做好牛肉面后,什么配料都不放了。然后又去吩咐服务员,给每张桌子放上四个小碗,分别放上葱花、香菜、辣椒油和醋,哦,还是用瓶子装醋吧。最后告诉客户,我们提供了四种配料,你们可以依据口味自己添加。

      提供一种主食——牛肉面,提供四种配料——香菜、葱花、辣椒油、醋。让客户自行选择。

 

      什么,您问如果有20位顾客,他们要的牛肉面都是完全一样的,难道让这20个人每个人都说一遍需求吗?这个就可以拿出来那个配料方案了,只不过这个配料方案不是有饭店提供,而是让顾客自行设置。比如让顾客找个代表出来,让他来指定配料方案(相当于管理员,由他来设置角色)。

      一开始老板的思路就是预先做配料方案,根据自己的经验和一些客户的需求来制定一个可以适合大部分情况使用的方案,然后让客户去选择。但是后来客户的各种各样的需求都上来了,哪一个都得答对好,都得满足。哪个客户能够得罪的起呢?于是就不断的修改自己的配料方案以满足需求。最后老板实在是顶不住了,把饭店可以提供的配料罗列出来,让客户自己去选择。这样饭店只需要提供单一的配料,其他的就不管了,把皮球踢给了客户。

 

      最后一种情况就是我的权限的思路了,就是我的项目提供基本的单一的功能,然后让客户自己去选择、组合

      而我的思路是这样的,我把功能“切成小片”,让客户(管理员)自己去组合成角色。而这个“小片”就以功能节点、按钮,甚至是字段、过滤条件的形式体现。而这些都列了个目录放在了表里面。(不知道我说清楚了没有)

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

      在重新整理一下表,如果只有用户和权限的话,是下面的这个图。一个用户可以有多个权限,一个权限也可以有多个用户。
 

 

      因为可能有许多人拥有相同的权限,一一给每个人设置比较麻烦,于是就引入了Role,通过Role来简化一下操作,同时也便于维护。如果权限有变化,那么只需要修改Role就可以了。用户和角色是多对多,角色和权限也是多对多。
 

 

      然后在引入Group,这个就有一点复杂了,Group并不仅仅是组织机构,还可能是工作组,也可能是其他。既然引入了Group,那么他就有可能和组织机构有一些关联。下面是我的一种理解。

 

 

      这样用户甲就可以通过部门来找到角色A。就是说不用在次给用户甲分配角色A了。

还有一个就是工作组,我想工作组就是角色的集合吧。一个用户拥有多个角色,那么就通过工作组来简化操作。

      最后就是权限,又回到了老问题,权限到底是什么?

我现在的设计是把权限分成了操作和资源两部分,然后操作又变成了功能节点 + 按钮的形式。而资源变成了字段(是否可用)和过滤条件,而过滤条件又分为列表过滤(GridView这一类的)和控件过滤(DropDownList这一类的)。
下面这个图好像有点乱。

 

      其实现在想一想,功能节点、按钮、字段这些不也可以看成是一种资源吗?就是说权限就变成了,对“资源”有没有使用的权力。这里的资源是一个广义上的资源,包括节点、按钮、页面、字段、数据、过滤方式(查询条件)等等。这样子的话,我不就只需要三个表了吗?用户表、角色表、资源权限表,哦忘记了两个关联表。用户和角色的关联,角色和资源的关联。这样就是五个表了,和那个传说中的Orcale的四个表就差一个表了。恩,那个两个关联表是不是也可以合并成一个呢?合并了之后就确确实实变成了四个表了。

      不管我的这四个表和Orcale的四个表是不是一样的,总之我是不喜欢这种为了减少表而把类似的都给挤到一个表的方式。我还是会用我的好多表的方式。至少在没有发现中大问题之前是不会改的。

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

      最后再说一下回复,我怕不说明的话,会没有人来回复,没有人来条我的毛病。我是希望大家来挑毛病的,但是您不能只说个结论就完事了吧,再说点论据和论证好吗?我就是一code,希望的是具体的东东,空洞的、泛泛的、没有实际意义的,我是很烦的。比如那个,因为 表的数量 > 4 ,所以我就是瞎搞,就是没弄明白设什么是权限。这叫什么呀?!

      另外我希望我们以朋友、同事、同学、程序员的身份来讨论,大家共同提高嘛!

 

 

时间: 2024-07-31 06:38:21

【自然框架】之通用权限(外传):杂谈的相关文章

【自然框架】通用权限的视频演示(一):添加角色,权限到功能节点和按钮

      写了几个关于权限的东东,好像大家都不大理解,也不太清楚我的权限到底能做什么,所以想来想去还是弄点视频吧,就是屏幕录像,这样大家看起来就方便了吧.       为了大家便于观看视频,我先说一下视频的步骤.      1.添加角色,选择角色可以使用的功能节点和按钮.      2.选择用户,就是给角色里面添加用户.      3.用用户的账号登录,查看效果.      4.修改角色可以使用的按钮,查看效果.       这里举了一个很简单的例子--新闻维护,有两个角色,一个是"新闻维护&

【自然框架】 权限 的视频演示(二): 权限到字段、权限到记录

      继续.这里演示权限到字段和权限到记录.            权限到字段有两种安全级别,      1.低安全级别.有些项目不需要做到控制每一个字段是否显示,那么就可以采用这种级别.低安全级别就是:如果一个节点里面没有设置可以访问哪些字段,那么就默认为不需要做到控制字段的程度,就是说节点里的字段都是可以访问的.这么做是为了操作方便.       2.高安全级别.有些项目要求非常严格,要严格控制每一个字段是否可以访问,那么就可以采用这种安全级别.高安全级别:如果一个节点里面没有设置可以

【自然框架 免费视频】资源角色的思路介绍(整理了一下以前帖子的目录,请刷新)

  请大家不要忘记点推荐!   源码下载: 自然框架的源代码.Demo.数据库.配置信息管理程序下载 这里介绍一下资源权限的思路,我们来设计一个场景,这个场景大家比较常见的,也是我遇到过的.我们来通过这个简单的实例,来看看资源权限可以如何实现. 资源权限,就是同样的一个表,一些人可以看到一部分信息,另一些人可以看到另一部分信息,还有些人可以看到全部信息,还有--.总之就是根据员工的权力,进行适当的筛选.可以看到一部分,或者可以看到全部.一级可以做什么样的操作(增删改查,导出等).   这里先只介

【自然框架】之通用权限(八):权限到字段(列表、表单、查询)

   通用权限想要写的文章目录:(这是第八章)   1. 简介.数据库的总体结构2. 介绍人员表组3. 介绍组织结构表组4. 介绍角色表组5. 介绍"项目自我描述表组"6. 权限到节点7. 权限到按钮8. 权限到列表(表单.查询)9. 权限的验证10. 资源方面的权限11. 角色管理的程序(给客户用的)12. 权限下放13. 个性化设置 A. [自然框架]之通用权限(外传):杂谈     列表 myGrid 先说一下myGrid,我会根据Manage_FunListCol表和Manag

【自然框架】之通用权限(四):角色表组

        继续,这是第四章了.这里涉及到了资源方面的,不过有点绕,所以这里先介绍一下表结构,在后面的章节里面,再举例子详细介绍. 通用权限想要写的文章目录:(这是第四章)   1. 简介.数据库的总体结构2. 介绍人员表组3. 介绍组织结构表组4. 介绍角色表组5. 介绍"项目自我描述表组"6. 权限到节点7. 权限到按钮8. 权限到列表(表单.查询)9. 权限的验证10. 资源方面的权限11. 角色管理的程序(给客户用的)12. 权限下放13. 个性化设置 A.. [自然框架]

【自然框架】之通用权限(二):人员表组

        继续,这是第二章了.本来想在这一章里面介绍三个表组来着,但是我有点写不好的感觉,还是多分几章吧,这一章就只介绍人员表组.第二章到第五章主要是介绍表结构.我是习惯使用Excel来设计表,一开始的时候只能记录表名.字段名.字段类型.字段说明等信息,但是一直没能找到如何使用Excel来体现出来表之间的关系.前一阵子(好像是去年)突然想到了可以使用"图表"+图形(比如箭头)的方式来做表关系,第一章里的那几个图就是这么弄出来的,看着还凑合吧.       至于为什么不用Power

【自然框架】之通用权限(一):简介、数据结构

        这次要写一整套的权限方面的文章了,无论我的想法好与不好,先写出来请大家来评判.这个系列我要详细的说明我的权限的思路.想法.实现方式.代码和Demo.可能有人会说,通用是达不到的,最多只能无限接近.恩,对于我来说,能够无限接近就可以了,当然我知道如果要达到这个目标并不是一件容易的事情,有难度才有挑战,才有意思.所以我会在权限方面不断的努力,不断的无限接近通用.也请大家多多帮忙,毕竟一个人的力量是有限的.              通用权限想要写的文章目录:(这是第一章)   1. 

【自然框架】之通用权限(五):项目描述表组

        继续,这是第五章了.我发现了,写文章比写程序还要有难度.   通用权限想要写的文章目录:(这是第五章)    1. 简介.数据库的总体结构2. 介绍人员表组3. 介绍组织结构表组4. 介绍角色表组5. 介绍"项目自我描述表组"6. 权限到节点7. 权限到按钮8. 权限到列表(表单.查询)9. 权限的验证10. 资源方面的权限11. 角色管理的程序(给客户用的)12. 权限下放13. 个性化设置 A. [自然框架]之通用权限(外传):杂谈         项目描述表组  

【自然框架】之通用权限(三):组织结构表组

        继续,这是第三章了.拖得有点长,但是我也是一边写,一边在想办法,想怎么做才能让资源权限也能通用起来.看大家的回复也给了我一些提示,我也在修改我的方案.原来打算用来解决一个人虽然在业务一部,但是却可以看业务一部.业务二部的客户信息的情况,但是仔细想了一下,这么做也不行.不过还好,我又找到了另一个方法来解决,而且可以让资源权限更加通用.不过这个详细的方法要放在下一章的角色表组里面来说明了.(这是写这篇之前的想法,写完之后想法又变了.)    通用权限想要写的文章目录:(这是第三章)

【自然框架】之通用权限(七):权限到按钮

         继续,这是第七章了.我已经到了无话可说的地步了.哎,在坚持几章就结束了.第七章到第十章,我打算采用简单说明的方式来做,因为我感觉我这么写好像大家都不打感兴趣,或者说都比较忙,没有时间细看,或者说我写的太乱了,看不明白.所以只能挑一挑是否符合范式这样的毛病,其他的地方要么没时间,要么是看不懂,总之没看都又来讨论的.这几章写完之后,进入Demo阶段.把Demo放出来,大家看看,如果好用呢,就用一用,如果有某个地方值得借鉴,那就借鉴一下,如果没有什么用处,那么就那么地了.如果有什么疑