【角色】——分离开代码和权限需求,即实现代码和权限需求的解耦。

 

 

今天突然来了一个灵感,记录一下。以前总觉得说不清楚,看看这种表达方式是否可以说清。

 

两个原则:依赖接口编程,不要依赖实现编程最小获知原则

 

面向对象最重要的是什么?抽象。那么在权限这方面我们要如何抽象呢?

 

   

最小获知原则

角色本身就是一种抽象出来的东东,用他来做隔离是最好不过了。因为客户里面是没有“角色”这个东东的。客户有岗位、部门、个人或者是工作组,但是就是没有角色。不是有句话吗,“什么?你不知道,那就好办了”。引用一下就是“什么?你这里没有,那就好办了”。

 

我们可以把角色说成是“部门”、“岗位”、“个人”,也可以说成是“岗位+个人”等各种说法,反正你那里没有角色,那我就怎么解释都行。最终解释权在我这里,咋说咋有理。

写代码的时候不用考虑客户的具体的权限方面的需求,只需要按照角色的规则编写,实现功能即可。

实现用户的各种权限需求也不需要去修改代码,也不用因此而影响代码如何去设计。只需要按照角色的规则来设置各个角色,即可实现客户的各种需求。

 

 

依赖“接口”编程

接口是广义的,不仅局限于interface。

 

角色是一种抽象,同时也可以理解是一种协议、规范。写程序的时候按照这个规范来设置权限相关的部分。用户的权限方面的需求也归结成各种角色。

 

客户只需要和角色打交道,同理,代码也只需要和角色打交道。角色就好像一个“翻译”,把客户的权限方面的需求翻译成“角色”,把程序也翻译成角色。都是“角色”就好沟通了。

 

当然了角色的规则并不是那么好设计的,每个人都会有不同的理解,不同的设计方式。但是我觉得有一点应该能够得到大家的认同:角色是一种接口、规范,用他来隔离代码和客户的权限方面的需求

 

 

角色是最顶级的抽象,具体怎么设计呢?每个人都会有不同的理解了。这里我只说自然框架里面是如何设计的。

 

其实思路是很简单的——登记造册。就是切成小块灵活组合

 

各行各业的项目,各种各样的客户,千奇百怪的需求,看是纷繁,其实万变不离其中。在信息管理项目的范围内,可以分为如下几种功能:

1、功能节点:大模块、小模块,节点、菜单。

2、操作按钮:查看、添加、修改、导出等等。

3、各种页面:列表、表单、导出、报表、图表等。

4、字段:列表里的列、查询里的查询条件。

5、记录:自己添加的记录、本部门的记录、体育类的新闻等等。

 

目前只能想到这五种了。如果您觉得不够,欢迎补充。

把这些信息登记造册,记录到数据库里,给每一个元素分配一个编号,一个编号就代表一个基本元素,比如功能节点,下图。

 

【功能节点及编号】

(FunctionID表示功能节点编号,描述一个项目都有哪些功能。)

 

【操作按钮及编号】

(ButtonID表示操作按钮的编号。一个节点里有哪些按钮。)

 

 

【字段信息及编号】

(ColumnID就是字段编号,FunctionID表示功能节点编号,这个视图表示“功能节点里的表单需要的字段”)

 

 

这样角色到节点,就变成了这个角色可以访问哪些编号,有这个编号就可以访问,没有这个编号就不能访问。就这么简单。

 

其他的也是类似的方法,给按钮编号,给字段编号,给数据的查询条件(即角色到记录)加编号。然后角色和这些编号关联起来,角色有编号就可以用,没有编号就不可以用。

 

这里只提到了功能节点、操作按钮等,并没有具体的需求。这就是一种抽象,就是一种规则。写代码的时候只需要考虑这些就可以了,不用去考虑客户的具体需求。客户是按照部门分权限,还是按照岗位去分配?管他那些呢?俺是写代码的,那些权限方面的需求管我p事?

而对于客户来说,只需要创建一个角色,规定这个角色可以访问哪些功能节点,可以访问哪些按钮,可以查看哪些字段就可以了。这些可以交给客户的角色管理员来设置,客户的角色爱怎么便就怎么便。只要不增加、修改功能,那么就不需要改程序。

 

可能您会觉得这么操作对于客户来说太麻烦了,但是呀,人是活的,完全可以写一个程序来维护呀。如果您用过我的Demo,或者看过视频,您就会知道,添加一个角色是很轻松的事情。

 

视频演示http://www.cnblogs.com/jyk/category/220555.html

 

【添加角色的页面】

 

您也许会觉得这么多的编号,验证起来一定很繁琐,而且这些编号都是没有意义的,如何识别?谁能记得住这些编号?

 

验证当然是很简单的,基本上不用再写代码了,也不用调用什么函数,因为就这么几种情况,完全可以把验证的功能放在基类里面,子类根本就不用考虑权限验证的事情。

编号也不是给程序员看的,程序员也基本看不到这些编号,也不用看这些编号。

 

 

 

Ps:

角色是什么?就是钥匙,项目的各种功能,各种元素都是带锁头的,想要使用就必须有钥匙。角色就是钥匙,准确的说,就是钥匙的集合。拥有了角色,就相当于拥有了一串钥匙,就可以去打开各个锁头使用功能。

而领取钥匙(角色),可以以个人的身份领取,每个人都有不同的钥匙;也可以按照部门领取,部门里的所有人都拥有相同的钥匙;还可以按照岗位,同一个岗位拥有同一套钥匙。

还可以组合的方式,一个人在拥有了“岗位”带来的钥匙的同时,还可以拥有自己的钥匙。这样就很灵活了。

 

自然框架正在改进中,要出一个“稳定版”,就是把基础结构、命名空间、类名、函数名等固定下来,然后就不会再改了。

当然功能还是会不断扩展的,只是基础部分就不会在做改动了,就是要努力做到向下兼容。

代码改好之后就要出相关的文档、演示、视频等。争取一月底完成。

感谢大家的支持!

 

我希望对我的自然框架感兴趣的兄弟们可以点一下“推荐”,或者写一条留言。没有大家的支持,哪来的动力呀?

有些人总是觉得我的自然框架是没人要的,如果您认为自然框架还是有点用处的话,那么请您点一下“推荐”。谢谢!

没有其他的意思,只是想看看有多少人对我的自然框架感兴趣。

 

 

时间: 2024-10-26 23:45:30

【角色】——分离开代码和权限需求,即实现代码和权限需求的解耦。的相关文章

问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)

     不能说所有的bug都是纸老虎,但往往那种看似很奇葩的bug,导致的原因确实很简单,烦了你一段时间,找到真相又让你忍不住一笑.什么是奇葩的bug呢.我的定义是:代码逻辑都一样,但在A处是好的,到了B处就不行或者同类的ABC都是好的,D却不行了的bug.而最终,问题确实不在代码逻辑上面,往往是配置.权限或者业务逻辑之外的地方. 本地都是ok的,服务器还是不行,怪我咯         case1:本地工程改好,推倒服务器上,但一会儿,测试妹妹又叫了,"还是不行,你再看看".顿时眉头

Android中Root权限获取的简单代码_Android

我们知道Android手机操作系统采用的是Linux内核,Linux中最高的系统权限就是Root,这就类似与Windows中的Administrator系统管理员权限,也就是操作系统的最高权限.由于Root的权限过高,因此手机产商一般都不允许用户直接拥用Root权限,以防止用户修改系统内置的业务跟程序.但是对于用户来说,当然希望能拥有Root权限以将手机修改成自己的一种特色,因为有Root权限则可以任意修改手机的所有文件跟程序,让手机更加个性化. 复制代码 代码如下: Process proce

android 项目中怎么用代码判断手机的某项应用的权限是否允许或者禁止,

问题描述 android 项目中怎么用代码判断手机的某项应用的权限是否允许或者禁止, android 项目中怎么用代码判断手机的某项应用权限是否允许或者禁止,比如拍照权限,定位权限,,,这些权限在manifest 配置文件中多已经配置过了, 解决方案 可以获取AndroidManifest到这里所有配置的权限,然后查看你想查看的那个权限是否包含里面就可以了吧 解决方案二: 判断 ContextCompat.checkSelfPermission(context, permission) == P

ASP.NET通用权限验证的实现代码思路_实用技巧

本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 一. 类介绍 1.SFWebPermission:实现IHttpModule接口,权限验证入口: 2.SFConfig:导入XML配置类: 3.SFPermission:解析XML配置进行权限验证: 4.SFAccessOper:数据库操作类: 5.SFPermissionSQL:XML节点实体类: 6.SFParameter:XML节点实体类: 7.SFCommon:系统变量定义类

Android中Root权限获取的简单代码

我们知道Android手机操作系统采用的是Linux内核,Linux中最高的系统权限就是Root,这就类似与Windows中的Administrator系统管理员权限,也就是操作系统的最高权限. 由于Root的权限过高,因此手机产商一般都不允许用户直接拥用Root权限,以防止用户修改系统内置的业务跟程序.但是对于用户来说,当然希望能拥有Root权限以将手机修改成自己的一种特色,因为有Root权限则可以任意修改手机的所有文件跟程序,让手机更加个性化. 复制代码 代码如下: Process proc

ThinkPHP中RBAC权限带菜单栏显示和详细权限操作

RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系统的GBAC(GROUP-Based Access Control)的权限管理控制].简单的来说,一个用户可以拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.其对应关系如下: 在许多的实

需求分析和需求管理:管理好产品的需求

文章描述:需求的变动固然是造成这种结果的主要原因,另一个不能忽视的因素则是需求没有表述清楚,开发人员面对表述模糊的需求文档,更加无法完成既定的开发工作. 最近的一系列事情开始教育我,如果不能做好需求管理的工作,产品人员疲于应付不断变化的需求,导致无法正常开展产品的设计和管理工作.结果就是交付给开发人员的需求文档不断变动,开发人员也不知道自己究竟该做什么,项目进度越拖越慢.最后到了规定好的交付时间,因为拿不出需要的产出物,部门之间开始互相推诿.埋怨. 思考良久,需求的变动固然是造成这种结果的主要原

权限设计(下) - 细说权限设计

什么是权限管理 一般来说,只要有用户参与的系统,那么都要有权限管理,尤其是一些后台的管理系统, 权限管理可以实现对用户访问系统的控制,按照安全规则或者相关策略的控制,可以使用户访问到只属于自己被授权的相关(比如菜单,或者页面资源) 权限管理包括用户认证和授权两模块 用户认证 用户认证,说白了就是登录的时候进行的验证,验证用户身份合法性. 最常见的用户身份验证的方式: 1.用户名 + 密码 2.手机号 + 验证码 3.证书验证 来看一下流程图:     用户授权 用户授权,浅白点讲就是权限访问控制

如何提高代码质量(管理篇):代码复查

也许你是一位项目经理,也许你是一位项目骨干成员,或者开发小组长.在我发表"如何提高代码质量"的这一系统文章后,有许多网友都向我抱怨,说他无法把握整个项目组成员的代码质量.我想,这也是所有项目组普遍存在的问题吧,它通常表现为以下几个问题: 软件项目普遍存在的问题 1)新手.任何项目组成员都不可避免地出现新手,他们往往是刚刚从大学毕业的学生.这些新手由于软件开发时间太短,往往技术不成熟,没有形成良好的开发习惯,所以编写代码质量较差,问题很多.他们常常成为项目组的"鸡肋"

Oracle管理权限(一) Oracle权限基本概念和Oracle管理权限基本

1.权限的概念 权限(Privilege)是指执行特定类型SQL命令或访问其他方案对象的权利,权限包括系统权限和对象权限. 2.权限的分类 1)系统权限(System Privilege)是指执行特定类型sql命令的权利.它用于控制用户可以执行的一个或一组数据库操作. 超过一百多种有效的权限(SELECT * FROM SYSTEM_PRIVILEGE_MAP查) 数据库管理员具有高级权限以完成管理任务,例如: –创建新用户 –删除用户 –删除表 –备份表 常用的系统权限: CREATE SES