通用权限系统设计之功能权限

网上管理系统的权限设计似乎都是使用关系数据库的,这次我们的功能权限不再使用关系型数据库,直接使用对象数据库,体会一下面向对象的数据库在权限系统设计中的使用,因此也就不存在传统意义的数据库设计了。

直接看类图

在使用的时候只需这样

User user=new User("E0001");
if(user.hasPermissioin("R001001001")){
  //执行R001001001所代表的功能操作,例如“添加工单”的操作
}

一般的只需要User<->Role<->Resource即可,这里加入了一个ResourceList是为了使系统更加灵活,将系统的开发和实施分开。由开发人员管理Resource,由系统的实施人员进行RescourceList的创建,由用户的权限管理员管理角色及给角色赋予RescourceList。当系统有成千上万的资源时,这样做几乎是必须的。

事情就这么解决了!不过还有一个问题,怎么管理需要进行权限验证的资源?难道每个都用 if(user.hasPermissioin("R001001001")) ?可以这么做,开发的时候对需要管控的程序部分写上 if(user.hasPermissioin("R001001001")) ,再在resources.xml文件中进行如下的配置。当上线的时候,实施人员也从resources.xml获取原始资源组成一个个许可权列表ResourceList。resources.xml可以非常简单

<resources>
    <resource id="R001001001" name="添加工单"/>
    <resource id="R001001002" name="修改工单"/>
    ...
</resources>

这样做似乎也没什么问题,也不是太麻烦,只是程序中大量存在在if(user.hasPermissioin("R001001001")),并且还需要在resources.xml中填写资源名称,多了一层操作也就多了一个出错的可能,而且填写resources.xml似乎是一个比较傻瓜的事情,计算机就适合处理傻瓜的事情。

和xml作为配置文件有相似功能的是注解(C#中称为特性),在不需要经常修改配置(只能由开发人员修改)的场合使用注解会比xml文件配置合适,XML 会导致配置和代码人为地隔开了,查看源代码了解映射关系会很不方便。这里的权限设计正好是这样,程序中添加资源必然后导致resources.xml的修改,resources.xml的修改肯定也说明程序有了改动,也就是这个配置必然是开发人员改动的,注解/特性就非常的合适。

[Resource(Name="工单模块")]
class WorkOrder{
    [Resource(Name="创建工单")]
    public Create(){
    }

    [Resource(Name="修改工单")]
    public Modify(){
    }
}

系统中有哪些需要管理的资源?直接反射含特性的类和方法,资源的ID直接用类名+方法名即可。当前用户有没有权限访问这个操作资源,直接在Resource特性中进行过滤即可。这样程序的开发就是个很happy的事情了,要纳入权限管理的类或方法,就在上面加一句 [Resource(Name="")]

如果系统非常庞大,又包含几个独立的子系统,那类似xml的配置文件可能还是少不了,需要灵活使用了。

时间: 2024-10-10 02:50:39

通用权限系统设计之功能权限的相关文章

通用权限系统设计

权限系统是否要独立于应用系统进行设计一直存在争论,通用的权限成指数的提高了系统的复杂程度,同时执行也影响了系统的执行效率.但是一旦设计完成一个通用的权限系统,可以用于多个项目,大大节省了成本.总结就是一句,为一个项目设计一个权限控制系统是正确的,通用只是为了方便后面项目的重用,节省后续项目的成本,当然前期需要投入了. 权限系统一般分为功能权限.数据权限.字段权限三种,最简单也是最容易设计成通用的就是功能权限.权限系统的设计说简单也简单,就是能满足当主体(用户)要操作(访问)某个资源(数据)时,去

通用权限系统框架功能实现设计

1  开发环境技术:B/S(.NET C# ) 1.Windows 7及以上 (支援最新Win 8) 2.Microsoft Visual Studio 2013 C#.NET 3..NET Framework 4.0及以上 (支援最新4.5版本) 4.SQL Server 2008 R2及以上 (支援2012/2014)框架特点 2  系统简介 1.帮企业快速地实现各种通用功能,结合系统现有的通用权限管理功能. 2.快速地开发出各种项目应用系统.让企业开发一个系统变得非常轻松. 3.符合RBA

通用权限管理系统中数据权限功能开发及使用说明

数据权限指的是用户在某个权限域(一般是功能菜单)有哪些基础资源(用户,公司,角色等)的控制权限,这是权限管理系统的核心部分,也是最难掌握的. 应用场景:在某个页面,需要控制用户对地区的下拉菜单中只能显示部分城市.下面我来介绍一下说明方法及功能实现代码: 设置用户某个权限域(公司管理)上的地区访问权限 点击地区树的响应,选中时执行授权,取消选中时撤销授权. 授权和撤销权限的后台代码 /// <summary> /// 授予用户某个权限域的地区权限 /// 范围权限可以按照这个,不需要创建那么多s

SpringSecurity原理剖析与权限系统设计

Spring Secutity和Apache Shiro是Java领域的两大主流开源安全框架,也是权限系统设计的主要技术选型.本文主要介绍Spring Secutity的实现原理,并基于Spring Secutity设计基于RBAC的权限系统. 一.技术选型 为何把Spring Secutity作为权限系统的技术选型,主要考虑了以下几个方面: 数据鉴权的能力:Spring Secutity支持数据鉴权,即细粒度权限控制. Spring生态基础:Spring Secutity可以和Spring生态

java权限系统设计篇

数据库表设计 1.1.1.   模块管理(jk_module) 项 类型 说明 id long 就是数据库记录idx号 name string 模块名称 orderid int 排序id  由小到大显示 deleted int 默认0 (0 正常  1删除状态) 1.1.2.   模块功能管理(jk_module_fun) 项 类型 说明 id long 就是数据库记录idx号 moduleid long 所属模块 name string 功能名称 urls string 功能url集合 ord

Django之路- 如何开发通用且万能的的权限框架组件

本节内容 需求讨论 权限设计 代码设计 自定义权限钩子 业务场景分析 本节课老男孩教育ALEX教你假设我们在开发一个培训机构的 客户关系管理系统,系统分客户管理.学员管理.教学管理3个大模块,每个模块大体功能如下 客户管理销售人员可以录入客户信息,对客户进行跟踪,为客户办理报名手续销售人员可以修改自己录入的客户信息客户信息不能删除销售主管可以查看销售报表 学员管理 学员可以在线报名 学员可以查看自己的报名合同.学习有效期学员可以在线提交作业 .查看自己的成绩 教学管理管理员可以创建新课程.班级讲

C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 数据权限增强、范围权限增强

并不是不想做B\S的管理工具,只是精力实在不够,由于用户权限管理组件是基础组件.所以C\S的也无妨,不会有几个人在乎Oracle,SQLServer是否不b\s的,注重的是功能性能,请大家不要纠结与是否B\S还是C\S上. 实现的方法.设计的界面.数据库结构的设计.底层DLL方法的函数调用,都可以参考,毕竟自己全部实现一个,耗费太多精力,不如拿过来用用参考,按自己的需要修改几下就可以用了,省心省事省力,腰不疼腿不酸,没必要浪费生命. 由于公司的组织机构庞大.网点非常多,所以数据权限的设置也非常复

可能是史上最全的权限系统设计

权限系统设计 前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题. 目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1.权限模型 迄今为止最为普及的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Acces

转:权限系统设计模型分析(DAC,MAC,RBAC,ABAC)

术语 这里对后面会用到的词汇做一个说明,老司机请直接翻到常见设计模式. 用户 发起操作的主体. 对象(Subject) 指操作所针对的客体对象,比如订单数据或图片文件. 权限控制表 (ACL: Access Control List) 用来描述权限规则或用户和权限之间关系的数据表. 权限 (Permission) 用来指代对某种对象的某一种操作,例如“添加文章的操作”. 权限标识 权限的代号,例如用“ARTICLE_ADD”来指代“添加文章的操作”权限. 常见设计模式 自主访问控制(DAC: D