当前位置: 首页 > news >正文

最经典的权限设计同样也是最糟糕的权限设计,权限设计理念最关键第一步之间的PK...

   大概在接近10年前做VB版本的ERP系统,其中的权限分配也完全是类似下面的设计思路,分若干个模块、有新增、删除、编辑、删除、扩展1、扩展2、扩展3等操作权限定义,当时也很佩服设计类似权限系统的人,感觉设计这个的人真的是很有水平,甚至在后来的N多业务系统里也进行模仿,也做过类似的权限判断优化的存储过程程序等,当年也非常有成就感,呵呵。

        

      

 

    当还没深入开发时也感觉不出来其中的奥秘,也体会不出来否好用还是不好用,就感觉看着是很强大,足够强大,还可以无限扩展一样。

 

    随着自己着手开发的信息化业务系统越来越多、经验积累也越来越多、各种体会也越来越深刻,从最近5年左右开始,逐渐发现这个权限设计存在蛮多问题,有很多细节方面无法满足开发要求灵活性,先简单的总结一下其中的不足,虽然对付用用还是没问题:

    1:例如有些模块,是没删除功能的也没结束功能的,例如打个比方“成本预算”不是啥模块都清一色“添加、删除、修改”,权限哪里有那么简单了。

    2:无法进行灵活扩展,例如某一个人有人事招聘权限、面试权限、笔试权限、确定岗位权限、确定试用期期限的权限,那怎么扩展了?那不是没完没了了?

    3:判断权限的函数相对繁琐,需要判断哪个模块上的什么操作权限?2个参数才可以,相对于只进行有什么操作权限判断还是过于复杂。

    4:无法简化、细化操作权限项,例如我想简化为5个权限,不想设置这么多权限时,就会麻烦一些。

   

    由于存在以上几点缺点无法得到比较好的解决,后来权限管理的设计就进行了简化、使得更加灵活了,更加好扩展了。

 

   

 

   操作权限的判断函数也变得非常简单,就一行代码就可以了,思路也简化了,灵活性也有了。

   // 这些是操作权限,当前用户有什么相应的操作权限?
   this.permissionAdd = this.IsAuthorized("RoleAdmin.Add");

 

   一个好的权限管理系统,若刚开始就走错了方向,那接下来越走就越折腾了,很多时候往往是设计思想的一点点变化,可能会导致全局上的天大差别,有的软件越走越臃肿,越累。

  

   其实很多时候,往往是差距那么一点点的小小的设计理念,小小的功能差别,就能绝对胜败。例如海湾战争期间,伊拉克的坦克也是坦克,老美的坦克也是坦克,他们很多功能都有,但是人家老美的坦克就能多打几百米,那就整个战场上可能就由于有几百米的差距,带来惨痛的损失,在软件开发上也是一样的,很多功能上的一些细小的差距很可能导致了,整个软件系统就是没人家的好用。

 

转载于:https://www.cnblogs.com/jirigala/archive/2010/12/21/1912792.html

相关文章:

  • 回到达姆喽
  • 2011年通信运营的十大悬念
  • 改造面向过程式设计
  • 朝三暮四,还是朝四暮三?
  • dell mini9 fluxbox 亮度的调节和 wireless 无线网卡的安装
  • 黑客如何找回被偷走的电脑
  • Microsoft SQL Server Integration Service文章总结
  • 刷机 G7 2.3 Rom 的步骤
  • 毕业后的五年拉开大家差距的原因在哪里(轉)
  • C# 中编译器是如何实现闭包的
  • 积木人生
  • 初探SharePoint 2010如何强化员工协同
  • LoadRunner支持的IE版本
  • 关于ADDRCONF(NETDEV_UP): wlan0: link is not ready(under Monitor mode)
  • 鸡笼山下,帝子台城,振起景阳楼故址;玄武湖边,胭脂古井,依然同泰寺旧观。...
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Bootstrap JS插件Alert源码分析
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JSONP原理
  • leetcode46 Permutation 排列组合
  • MySQL-事务管理(基础)
  • select2 取值 遍历 设置默认值
  • Vue.js-Day01
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从重复到重用
  • ------- 计算机网络基础
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 如何利用MongoDB打造TOP榜小程序
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 入门级的git使用指北
  • 使用Swoole加速Laravel(正式环境中)
  • 微信小程序:实现悬浮返回和分享按钮
  • 为什么要用IPython/Jupyter?
  • 转载:[译] 内容加速黑科技趣谈
  • 做一名精致的JavaScripter 01:JavaScript简介
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​flutter 代码混淆
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)常见O(n^2)排序算法解析
  • (4)(4.6) Triducer
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (剑指Offer)面试题34:丑数
  • (十一)手动添加用户和文件的特殊权限
  • (一)RocketMQ初步认识
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net连接oracle数据库
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net与java建立WebService再互相调用