热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#.NETWinform快速开发框架权限系统详细设计(原创作品)

一、权限系统基本概述本文档描述了CS系统快速开发框架旗舰版V5.0权限管理模块详细功能设计,权限实现原理、系统架构设计、数据库设计、功能测试以及实施方案等。1.1权限管理

基于C/S结构快速开发框架之权限系统设计 - 基本概述|C/S框架网

 
一、权限系统基本概述
 
本文档描述了C/S系统快速开发框架旗舰版V5.0权限管理模块详细功能设计,权限实现原理、系统架构设计、数据库设计、功能测试以及实施方案等。
 
1.1 权限管理简单定义
 
权限管理是后台系统都会涉及的一个重要组成部分,主要目的是对整个后台管理系统进行权限的控制,针对对象是使用该系统的用户或员工,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,数据泄露等问题。根据系统设置的安全规则或策略,用户可以访问而且只能访问自己被授权的资源。
 
C/S系统快速开发框架权限管理是一个账号对应多个角色,每个角色对应相应的权限集RBAC模型,且通过角色可以实现灵活且多样的的权限操作需求。
 
1.2 权限类型
 
基于角色的访问权限控制(RBAC)模型,赋予用户的权限管理,可以分为三大类型:
 
 功能权限
 
角色的定义对模块和功能能否有执行权限,功能是系统执行权限控制的基本单元。
可以操作的功能不同,保证系统安全,避免操作风险。
 
 数据权限
 
权限的定义对功能涉及到的数据是否有增删查改的权限,能否查看与编辑系统相关数据。
保证数据隐私,避免数据泄密。
 
 界面权限
 
账号的定义对控制字段的可见性,可编辑性,用户可以看到的页面进行限制,职责不同所需要页面不同,保证操作效率,避免页面干扰。
 
 
1.3 RBAC模型
 
1.3.1 基于角色的访问控制
 
RBAC(Role-Based Access Control)基于角色的访问控制。成熟的权限模型强调三个要素:用户、角色、权限,用户与角色是多对多关系,角色与权限是多对多关系。RBAC是以“用户”为单位的权限设计,以“权限”为单位的权限设计,以“用户”与“权限”结合的权限设计。
 
权限设计:用户与角色逻辑关系图:
 
贴图图片
 
RBAC模型特点:
 
把权限赋予角色,再把角色赋予用户。
用户和角色,角色和权限都是多对多的关系。
用户拥有的权限等于所有的角色的权限之和。
 


贴图图片

 
 
1.3.2 基于RBAC的用户组
 
基于RBAC模型,适当延展增加用户组概念,直接给用户组分配角色,再把用户加入用户组,这样用户除了拥有自身的权限外,还拥有了所属用户组的所有权限。用户组权限是粗狂式设计,不能友好的细分权限。
 


贴图图片

 
 
1.4 C/S系统开发框架窗体权限控制
 
C/S快速开发框架的权限控制对象:功能菜单、数据窗体、功能按钮。
 
功能界面是点击菜单或点击按钮打开的,因此权限控制首先是控制菜单。当用户点击菜单打开界面后,系统会分析当前用户的权限以及对界面的组件进行控制,如控制按钮、表格列、界面组件是否显示或禁用等。
 
1.4.1 开发框架数据窗体分类
 
数据窗体分为两类:
 
a)数据字典窗体. 继承基类:frmBaseDataDictionary
 
b)业务单据窗体. 继承基类:frmBaseBusinessForm
 
 
1.4.2 按钮(功能点)指定权限值
 
为了方便给用户分配权限以及进行权限控制,C/S系统快速开发框架针对窗体中每个功能按钮或功能点分配一个特殊的数字编号(计算机二进制数据的数值),该数值分别对应2^n次方,如0,1,2,4,8,16,32,64,128,256,512,1024。。。32位的硬件系统最多支持2^32次方,64位的硬件系统最多支持2^64次方。
 
 若【X】按钮分配的数值为0,则该按钮或功能点不受权限控制,任何用户都可访问。
 若【X】按钮分配的数值为1,只有拥有1权限的用户才能访问。
 
 
1.4.3 窗体的基本权限
 
 数据字典窗体的基本功能权限:增、删、改、查、打印、预览。
 
C# Code:

/// 
/// 数据字典拥有的功能(增、删、改、查、打印、预览)
/// 

public const int MASTER_ACTION = DATA_ACTION_VALUE + REPORT_ACTION_VALUE;


 业务单据窗体的基本功能权限:增、删、改、查、打印、预览、审核、修改历史。
 
C# Code:

/// 
/// 业务单据拥有的功能(增、删、改、查、打印、预览、审核、修改历史)
/// 

public const int BUSINESS_ACTION_VALUE = DATA_ACTION_VALUE + REPORT_ACTION_VALUE +
ButtonAuthority.APPROVAL +
ButtonAuthority.SHOW_MOD_HISTORY;




1.5 二进制的逻辑运算
 
二进制是计算技术中广泛采用的一种数制,二进制数据是用0和1两个数码来表示的数。
二进制数的运算除了有【四则运算】外,还可以进行【逻辑运算】,下面分别予以介绍。
 
 
1.5.1 二进制四则运算
 
二进制数与十进制数一样,同样可以进行加、减、乘、除四则运算,其算法规则如下: 
 
加运算:0+0=0,0+1=1,1+0=1,1+1=10(逢2进1)
 
减运算:1-1=0,1-0=1,0-0=0,0-1=1(向高位借1当2)
 
乘运算:0×0=0,0×1=0,1×0=0,1×1=1(只有同时为“1”时结果才为“1”) 
 
除运算:0÷1=0,1÷1=1,二进制数只有两个数(0,1),因此它的商是1或0。
 
 
1.5.2 二进制的逻辑运算
 
逻辑运算又称布尔运算。
 
表示方法有:"或"/"OR"、"与"/"AND" 、"非"/"Xor"、"等"/"="。
 
1和0表示"真"和"假"。
 
And:同为真时为真。如:1 AND 1=1,1 AND 0=0。
 
Or:同为假时为假。如:0 OR 0=0,1 OR 0=1, 1 OR 1=1。
 
Xor:相同为假。如:1 XOR 1=0, O XOR O=0, 0 XOR 1=1。
 
 
二 权限系统功能模块介绍
 
C/S系统快速开发框架权限系统是基于菜单管理+功能按钮+系统用户+角色岗位+组织机构等多个数据维度构成,满足大多数桌面管理应用系统的需求。
 
2.1 功能模块构成
 
贴图图片
 
 
2.2 用户管理 (User Management)
 
用户管理是指管理与维护软件系统的使用者,用户管理就是给公司或企业人员进行系统登记,一般是由系统管理员进行登记,经登记的使用者及分配系统使用权限才能登入系统。
 
用户管理中的用户主要是软件系统的使用者。
 
贴图图片
 
 
2.3 角色/岗位 (Role Management)
 
角色是基于业务管理需求而预先在系统中设定好的,每个角色对应明确的系统权限,角色也不会随着用户的被添加和被移除而进行改变,只有分配用户的角色才有实际意义。对于企业管理人员而言,角色与岗位相同,如仓管员、调度员、系统管理员、采购员、会计、出纳等都是企业组织架构中的岗位,对于管理应用系统,如ERP系统,岗位既ERP系统中的角色。
 
贴图图片
 
 
2.4 组织机构权限管理 (Group Management)
 
C/S系统快速开发框架中的组织机构权限是指组权限(Group)。用户管理中的用户主要是指软件系统的使用者,把一个或多个用户归类在一起形成一个群体或小组,构成软件系统的用户组。把用户分组后,组用户成员拥有相同的权限等级。
 
贴图图片
 
 
2.5 系统菜单管理 (System Menu Management)
 
系统菜单即菜单栏,由若干个下拉菜单组成,每个下拉菜单包含一组菜单命令,对应打开不同的窗口或执行不同的命令,若菜单的内容能跟随业务逻辑变化,所以也被称为“动态菜单”。
 
针对功能菜单来划分用户权限其实是比较粗颗粒度的一种管理方式,用户获得授权即可使用该菜单栏下的全部数据查看权限和功能操作权限。
 
贴图图片
 
 
2.6 临时权限
 
临时角色是针对特殊用户群体设置的,通常会设置角色的过期时间,一般并没有固定角色符合拥有客户所需的全部操作权限,因此需要开设临时角色,并且支持给临时角色最大的权限选择空间。
 
 
贴图图片
 
 
2.7 批量设置用户和角色
 
批量设置用户和角色功能是针对用户组管理开发的一个辅助功能,把设置用户和角色采用复选框的方式,提高界面用户体验。

贴图图片
 
四 权限系统实现原理
 
本文将描述基于功能按钮权限控制的基本实现原理,在学习权限系统实现原理之前,请先看下面的流程图:
 
贴图图片
 
 
【当前用户】:是指当前登录系统的用户(软件使用者)。
 
【点击菜单】:用户点击界面上面的菜单栏或左侧导航菜单。用户能查看或点击的菜单项代表当前用户拥有此菜单的权限。
 
【打开界面】:用户点击菜单执行事件并成功打开功能窗体,触发初始化界面(Form_Load)事件,开发框架底层将根据当前用户的权限进行按钮控制,有按钮权限则显示按钮,无权限的则不创建或隐藏按钮。
 
【按钮控制】:下面将重点讲解界面的按钮权限控制实现原理。
 
 
4.1 按钮权限控制基本原理
 
以数据字典窗体【员工管理】举例说明,假设【员工管理】拥有以下按钮及对应的权限值:
 
贴图图片
 
 
模拟场景:
 
用户【User-孙】属于【Role1】角色, 在【角色管理】界面内给【Role1】角色分配【员工管理】窗体的权限为:(1,2,4,8)=15,勾选【新增】、【删除】、【修改】、【查看】功能, 用户【User-孙】登录后取到【员工管理】窗体的权限值为1+2+4+8=15. 在打开【员工管理】窗体时, 框架底层对【员工管理】窗体的每个按钮分别与当前用户的权限值15进行逻辑【与】运算。
 
逻辑【与】运算结果如下:
 

贴图图片
 
在Form.Load事件内调用InitButtons方法,有权限的按钮则Button.Enable=True, 无权限的按钮则Button.Enable=False; 
 
 
4.2 逻辑“与”运算C#代码参考
 
相关C#代码参考:
 
贴图图片
 
ButtonAuthorized方法主要是进行逻辑“与”运算:
 
贴图图片
 
 
参考文档:
 
Winform通用框架(C#.NET)之权限管理系统详细设计|C/S框架网
http://www.csframework.com/archive/1/arc-1-20190129-2582.htm
 
 
本文转自C/S框架网:http://www.csframework.com
 
 

推荐阅读
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • 如何清除Chrome浏览器地址栏的特定历史记录
    在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
  • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
    本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文详细介绍了在XAMPP环境中如何修改Apache和MySQL的默认端口号,并确保WordPress能够正常访问。同时,提供了针对Go语言社区和Golang开发者的相关建议。 ... [详细]
  • 探索新一代API文档工具,告别Swagger的繁琐
    对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
  • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
  • 探讨 HDU 1536 题目,即 S-Nim 游戏的博弈策略。通过 SG 函数分析游戏胜负的关键,并介绍如何编程实现解决方案。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
author-avatar
九育
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有