解析大型.NET ERP系统 权限模块设计与实现

权限模块是ERP系统的核心模块之一,完善的权限控制机制给系统增色不少。总结我接触过的权限模块,以享读者。

1 权限的简明定义

ERP权限管理用一句简单的话来说就是:谁 能否 做 那些 事。

文句含义说明
部门+岗位职责也可以不与部门岗位绑定,省略角色定义。
能否能(True) 否(False)用0或1,true/false表示能否执行
增加/删除/修改/查询/统计/打印/过帐权限对象
哪些通用的/本人的/本组别的/本部门的/本公司的/其他的/多帐套的范围:行政部的办公文具采购申请,PMC运行物料需求计划产生采购部的物料采购计划。
数据(如客户、供应商、订单、报表等) 

关于”能否”文句,支持组合拼接。比如有三个权限对象,分别是增加,删除,修改。用户A只有修改权限,用数字1表示有权限,则A用户的权限字符串可以表示为001,这样可以满足动态增加权限对象的需求。

关于部门岗位职责,也就是通常说的角色(Role),因为角色的含义着重在于实际的业务理解,系统很难控制到这样细节的地方,我们的ERP系统省略了角色表,将权限与用户直接绑定。

 

2 权限的分类

1) 系统权限 System Login  是否登入系统,能执行哪些模块,可以看到哪些操作菜单项。对没有权限操作的界面应该隐藏或变灰,避免提示”对不起,您没有权限”。

2) 功能权限 Module/Function  对模块和功能能否有执行权限,功能是系统执行权限控制的基本单元。对模块权限的操作,可批量设置模块下功能的权限,程序最终进行判断的地方还是以功能权限为依据。

2) 数据权限 Data/Field  对功能涉及到的数据是否有增删查改的权限,能否编辑和查看相同单据其它用户的数据,能否查看与编辑特殊字段的数据(字段权限),常常是指金额类字段。比如采购模块的采购收货与仓库模块的采购收货,后者应该会隐藏与关联的采购订单中的物料价格信息。字段权限可以与用户或用户组别绑定。

 

3  权限设计方法:基于角色的访问机制(Role-Based Access Control,RBAC)

先设计用户组别,对用户组别分配权限,再创建用户绑定到用户组别。表与其字段定义:

用户组别(用户组别编码,已取消)

用户组别模块(用户组别编码,模块编码,模块名称,新增权限,删权限除,修改权限,过帐权限,打印权限)

用户组别模块功能(用户组别编码,模块编码,功能编码,新增权限,删权限除,修改权限,过帐权限,打印权限)

用户既可以按照模块批量增加权限,也可单独的逐个功能增加权限。涉及字段权限的地方需要单独设置。

 

4  优化权限模块设计

1)  考虑多帐套(多数据库)情况下,授权的一致性。要求提取业务数据库中的相似数据到框架数据库中。

2)系统集成。需要考虑与LDAP/DBMS系统的集成性。与域集成时,可以实现免登录直接进入系统。当与其它数据库集成时,根据需要设计各自的用户提供程序,比如OracleUserProvider,MySQLUserProvider,分别实现连接到Oracle和MySQL数据库中执行权限判断。

3)  与硬件设备集成。执行权限判断时自动识别硬件设备,比如Smart Card智能卡或加密狗。

4)  用户密码需要加盐或是MD5加密,或是DES可逆算法加密。拒绝明文存储密码,密码丢失后可用密码重置功能重设密码,考虑强密码策略,包含字母数字和特殊字符组成的密码。

5)  登录限制,限制用户必须在指定的区域(IP地址范围,局域网子网,域)才能登录使用。

6)  对没有权限的功能,应该隐藏或是变灰,以解决权限难题。比如按钮没有变灰或隐藏,点击按钮后才进行权限判断,提示”对不起,您没有权限”,这类提示很不友好,应该要预先判断权限。

7) 考虑用户密码过期,超过一定时间范围后用户必须修改密码以增加安全性。

8)  管理员分配初始密码时,考虑密码生成工具,生成随机字符串密码,符合Windows强密码供管理员使用。

 

5  业务逻辑中的权限控制

ERP系统中有一些权限控制的地方,比如价格控制,信用控制,流程控制等。这些控制不在通用权限系统中考虑。

举例说明,ERP系统中的用户权限。

模块权限说明
系统可进入所有公司否则只能进入指定的公司帐套
系统可执行多帐套操作A公司的销售单产生B公司的采购单
销售

可使用所有客户

需要使用指定的客户
销售允许关闭报价单报价单关闭后不能再生成销售单
销售隐藏销售价格销售功能中隐藏价格字段
销售允许销售单修改单价销售功能中不允许修改单价
销售销售功能中执行价格下限控制销售功能中执行总金额控制,比如客户A的信用上限20万,向客户A卖出货物价值超过20万时,单据无法通过记帐或审核。
采购可使用所有供应商否则只能用指定的供应商
采购收货单不支持超额收货收货单收货数量为100,是否支持收货120个数量
采购隐藏进仓成本隐藏物料进仓价格(先进先出,平均成本)
采购隐藏采购价格隐藏物料采购价格

这些参数控制分布在ERP系统的各个模块功能中,无法实现抽象化设计。

 

6 权限对象 动态权限

以上设计中,硬性规定了七种权限,它们是增加,删除,修改,查询,统计,打印,过帐。如果要增加其它的权限则会涉及到比较多的改动。考虑将权限对象本身设计为可动态增加的,比如我需要增加一个数据导出权限(Export),只需要在权限对象表中增加一行记录,并分配可以执行此权限的用户或用户组别,增加代码判断即可完成权限系统的开发。动态权限在大型管理系统中很常见,预先设计的固定的权限在实施时无法满足实际需求时,考虑动态权限设计方法。
用友的系统就是把权限设计为一个代码,用一个表保存用户具有的权限的代码。

 

7  权限申请与批核生效,权限注销

为避免权限申请人与IT之间的信息沟通不畅,定义权限申请批核和生效流程。

由需要何种权限的用户提出申请,填写权限申请表单,选择需要登入的模块和功能,再经由用户所在的部门负责人审批,权限审批通过后,由IT部门确定,权限申请审批生效。

当用户不再需要登入系统或某种权限时,IT部门直接将用户注销或删除相应的权限,避免审计问题。

 

8  钻石白菜理论

买白菜时,通常为了白菜价格是八毛还是一块与小贩争论不休,斤斤计较;买钻石时,却为了追求好看,高贵,毫不在乎钻石的价格,只求贵的,好看的钻石。
设计权限模块以实用为主,不追求过度设计,不追求更完美的设计。
能满足现有的客户需求,对未来客户增加需要不涉及太多的改动,这样的权限系统设计就是合理合适的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程通过实际项目融入常用开发技术架构,讲授风格独特,提供详细上课日志及答疑,赠送配套的项目架构源码注释详细清晰且表达通俗,均能直接在实际项目中应用,正真的物超所值,价格实惠任务作业:综合运用《C#/.Net企业级系统架构设计实战精讲教程》课程所学知识技能设计一个学生成绩管理系统的架构。要求:1.系统基于MVC的三层架构,各层单独建不同的解决方案文件夹。2.采用Model First开发方式,设计架构时只需要设计学生表(TbStudent)和课程表(TbCourse)。学生表必须有的字段是ID、stuName、age;课程表必须有的字段是ID、courseName、content。3.数据访问层采用Entity Framework或NHibernate来实现,必须封装对上述表的增删改查方法。4.必须依赖接口编程,也就是必须要有数据访问层的接口层、业务逻辑层的接口层等接口层。层层之间必须减少依赖,可以通过简单工厂或抽象工厂。5.至少采用简单工厂、抽象工厂、Spring.Net等技术中的2种来减少层与层之间的依赖等。6.封装出DbSession类,让它拥有所有Dal层实例和SaveChanges方法。7.设计出数据访问层及业务逻辑层主要类的T4模板,以便实体增加时自动生成相应的类。8.表现层要设计相关的控制器和视图来验证设计的系统架构代码的正确性,必须含有验证增删改查的方法。9.开发平台一定要是Visual Studio平台,采用C#开发语言,数据库为SQL Server。10.提交整个系统架构的源文件及生成的数据库文件。(注意: 作业需写在CSDN博客中,请把作业链接贴在评论区,老师会定期逐个批改~~)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值