权限管理系统之组织管理

概述

基于角色的用户权限管理系统(RBAC)是目前公认的解决大型企业的统一资源访问控制的有效方法。

本套权限管理组件不局限于传统的权限,角色,用户三者的关系,在减小授权管理的复杂性基础上,通过独特的允许、禁止资源控制思想,增强了授权的灵活性。既可以按照角色统一授权,也可以对人员独立授权。权限可粗粒度的分为模块权限,亦可细化到具体操作资源和功能(菜单、按钮、数据)。能够指根据系统管理员设置的安全规则或者安全策略,能够达到使用户可以访问且只能访问自己被授权的资源,并拒绝访问被禁止的指定资源。

平台配合提供了业务系统常用字典管理功能,可通过可视化的操作和维护,能快速操作平台上的字典数据。整个数据字典数据为框架平台所共享,有效提高了数据的重复利用率和产品、项目的开发效率。

这是一套通用的权限组件框架,适用于C/S、B/S架构的企业级应用系统。提供了基础的权限控制和资源管理功能,因此可以作为业务系统、办公系统或门户网站系统的实现参考指南,也可以通过调用该系统组件中的接口来完成集成。

主要包括以下功能模块:系统代码管理、模块管理、角色管理、组织管理、职员管理和用户信息管理。

功能导航区(用户模块)如下图4-1所示:

图4-1  权限管理功能导航区

4.3 组织管理

有人的地方,就有江湖。

组织管理或许是权限管理系统中四大模块里最容易理解和实现的内容。

从广义上说,组织是指由诸多要素按照一定方式相互联系起来的系统。

从狭义上说,组织就是指人们为实现一定的目标互相协作结合而成的集体或团体。狭义的组织专门指人群而言,运用于社会管理之中。在现代社会生活中.组织是人们按照一定的目的、任务和形式编制起来的社会集团,组织不仅是社会的细胞、社会的基本单元,而且可以说是社会的基础。

从管理学的角度来说,组织是人们为了某一目的而形成的群体,是确保人们社会活动正常协调进行、顺利达到预期目标的体系。

它按照一定的规则和程序构成的一种责权结构安排和人事安排,其目的在于确保以最高的效率实现组织目标。组织管理模块提供直观、方便的组织机构管理,以树型结构的可视化形式显示了各组织之间(机构、部门)的关系。

组织(机构、部门)管理的功能作业区(用户操作)界面如下图4.3-1所示,通过主要的操作按钮和信息内容可知其功能有:新增组织,编辑组织,删除组织,移动组织,组织排序等。其中功能操作按钮的状态会根据选择的左侧树型中不同节点和不同登录用户的动作权限而改变。平台在理论和实现上支持了无限递归的树型组织结构,可根据实际需要进行添加、修改、删除或移动等对组织机构进行调整处理。

图4.3-1  组织管理界面

树形的组织机构代码核心算法主要由以下代码完成:

 1       #region LoadDepartments
 2         private void LoadDepartments(TreeNode currentNode, DMESYS_DEPARTMENT currentDept)
 3         {
 4             List<DMESYS_DEPARTMENT> subDepartments = null;
 5             if (currentDept != null)
 6                 subDepartments = DBOSYS_DEPARTMENT.GetSubDepartments(currentDept);
 7             else
 8                 subDepartments = DBOSYS_DEPARTMENT.GetAllTopDepartments();
 9
10             foreach (DMESYS_DEPARTMENT d in subDepartments)
11             {
12                 TreeNode node = currentNode.ChildNodes.Add();
13                 node.Tag = d;
14                 node.Text = d.Name;
15                 node.CollapsedImageIndex = 1;
16                 node.ExpandedImageIndex = 2;
17
18                 LoadDepartments(node, d);  //递归
19             }
20         }
21         #endregion

该算法主要是通过递归的方式加载组织机构的树形菜单。

组织机构的数据模型层DML中实体类都实现了序列化,实体类DMESYS_DEPARTMENT具体实现定义代码如下:

  1 [Serializable, Class("DMESYS_DEPARTMENT", "Id")]
  2     public class DMESYS_DEPARTMENT : DMEBase, IEquatable<DMESYS_DEPARTMENT>
  3     {
  4         #region Private Members
  5         private string _id;
  6         private string _parent_id;
  7     .........
194     }

组织机构的数据访问层DAL中访问操作类都实现了序列化,访问操作类DBOSYS_DEPARTMENT具体实现定义代码如下:

 1 public class DBOSYS_DEPARTMENT
 2     {
 3         /// <summary>
 4         /// 获取所有顶层的部门实例。
 5         /// </summary>
 6         /// <returns>所有顶层的部门实例。</returns>
 7         public static List<DMESYS_DEPARTMENT> GetAllTopDepartments()
 8         {
 9             string sql = "SELECT * FROM SYS_DEPARTMENT WHERE Parent_id IS NULL OR Parent_id = ‘‘ ORDER BY Order_id";
10             List<DMESYS_DEPARTMENT> deptList = new List<DMESYS_DEPARTMENT>();
11             List<IIdentifiedBase> iIBList = new List<IIdentifiedBase>();
12             DataTable dt = DBMsSqlManager.ExecuteDataTable(sql, DBOService.GetTableName(typeof(DMESYS_DEPARTMENT)));
13             iIBList = DBOService.DataTable2DMEList(dt, typeof(DMESYS_DEPARTMENT));
14             foreach (IIdentifiedBase iIB in iIBList)
15             {
16                 deptList.Add(iIB as DMESYS_DEPARTMENT);
17             }
18             return deptList;
19         }
20
21         /// <summary>
22         /// 获取子部门。
23         /// </summary>
24         /// <param name="parentDept">指定部门</param>
25         /// <returns>所有子部门实例</returns>
26         public static List<DMESYS_DEPARTMENT> GetSubDepartments(DMESYS_DEPARTMENT parentDept)
27         {
28             string subSql = String.Format("SELECT * FROM SYS_DEPARTMENT WHERE Parent_id = ‘{0}‘ ORDER BY Order_id", parentDept.Id);
29             List<DMESYS_DEPARTMENT> subDeptList = new List<DMESYS_DEPARTMENT>();
30             List<IIdentifiedBase> subIIBList = new List<IIdentifiedBase>();
31             DataTable subdt = DBMsSqlManager.ExecuteDataTable(subSql, DBOService.GetTableName(typeof(DMESYS_DEPARTMENT)));
32             subIIBList = DBOService.DataTable2DMEList(subdt, typeof(DMESYS_DEPARTMENT));
33             foreach (IIdentifiedBase subIIB in subIIBList)
34             {
35                 subDeptList.Add(subIIB as DMESYS_DEPARTMENT);
36             }
37             return subDeptList;
38         }

4.3.1 新增、编辑和删除

平台自带了一个根节点“组织机构”的概念,所有的组织(机构、部门、单位)都是该节点的子节点。组织机构并不是真实存在的顶级组织,无可操作意义。

对于组织机构的操作动作,在权限系统中定义了如下的枚举类型,能够有效的对操作进行统一判断:

 1 namespace FoQus.Rights
 2 {
 3     public enum Action
 4     {
 5         /// <summary>
 6         /// 新增
 7         /// </summary>
 8         ADD,
 9         /// <summary>
10         /// 编辑
11         /// </summary>
12         EDIT,
13         /// <summary>
14         /// 移动
15         /// </summary>
16         MOVE,
17         /// <summary>
18         /// 删除
19         /// </summary>
20         DELETE
21     }
22 }

新增组织:点击展开树形菜单“组织机构”,可以看到平台的各个组织目录(机构、部门、单位)之间的情况。选择根节点组织机构或者一个平台已有组织后点击“新增”按钮,弹出如下图4.3.1-1中所示操作界面:

图4.3.1-1  新增组织

在新增组织的过程中,组织基础信息中带红色星号标记“*”条目的名称和排序ID是必填内容。另外可以设置联系方式以及备注等内容。

编辑组织:这里主要是当涉及到需要修改组织基本信息(如组织名称、排序位置、联系方式、备注)时进行的编辑操作。

点击展开树形菜单“组织机构”,在组织目录(机构、部门)下选择一个已有的组织后点击“编辑”按钮,具体操作界面如下图4.3.1-2中所示:

图4.3.1-2  编辑组织

删除组织:如果需要对平台上的组织进行删除,点击展开树形菜单“组织机构”,在组织下选择一个组织后点击“删除”按钮,下图4.3.1-3中显示了几个典型的删除组织操作时的提示对话框界面。

备注:对于拥有子组织的组织是无法直接删除的,首先需要删除下级组织;如果该组织目录有下属人员时,也将无法直接删除。

图4.3.1-3  删除组织提示

4.3.2 移动组织

平台上的组织在工作生产过程中可能会发生归属或者分组的变更,此时就需要涉及到对组织进行移动操作。

点击展开树形菜单“组织机构”,选择一个组织后点击“移动”按钮,如下图4.3.2-1所示,界面以动态树形方式列出了当前平台的组织结构,选择需要移动到的目标组织,点击确认,即可完成组织归属关系的调动。

图4.3.2-1  移动组织

移动组织机构主要分为两大动作,首先判断移动目标的有效性,然后完成组织信息的更新。具体代码如下:

 1 private void TargetContainsDest(DMESYS_DEPARTMENT target, DMESYS_DEPARTMENT dest)
 2         {
 3
 4             List<DMESYS_DEPARTMENT> subDepts = DBOSYS_DEPARTMENT.GetSubDepartments(target);
 5             if (subDepts.Count > 0)
 6             {
 7                 foreach (DMESYS_DEPARTMENT d in subDepts)
 8                 {
 9                     if (d.Id == dest.Id)
10                     {
11                         flag = true;
12                         break;
13                     }
14                     if (DBOSYS_DEPARTMENT.GetSubDepartments(d).Count > 0)
15                     {
16                         foreach (DMESYS_DEPARTMENT d2 in subDepts)
17                         {
18                             TargetContainsDest(d2, dest);
19                         }
20                     }
21                 }
22             }
23         }
24
25         private bool MoveDepartment()
26         {
27             if (tvOrgan.SelectedNode == tnRoot)
28             {
29                 target.Parent_Id = "";
30                 DBOSYS_DEPARTMENT.UpdateDMESYS_DEPARTMENT(target);
31                 return true;
32             }
33
34             if (destObj != null)
35             {
36                 DMESYS_DEPARTMENT dest = destObj as DMESYS_DEPARTMENT;
37                 TargetContainsDest(target, dest);
38                 if (target.Id != dest.Id && !flag)
39                 {
40                     target.Parent_Id = dest.Id;
41                     DBOSYS_DEPARTMENT.UpdateDMESYS_DEPARTMENT(target);
42                     return true;
43                 }
44                 if (target.Id == dest.Id || flag)
45                 {
46                     lbTip.Visible = true;
47                 }
48             }
49             lbTip.Visible = true;
50             return false;
51         }
时间: 2024-10-20 00:44:09

权限管理系统之组织管理的相关文章

权限管理系统之用户管理

4.1 用户管理 用户是登录系统的楔子. 用户管理主要是针对平台的使用者进行管理.包括: ① 用户信息(帐号.密码.姓名等个人基本信息和状态.职位.职务等平台信息)② 用户组设置.组织归属③ 角色设定④ 用户的模块资源授权和具体动作权限分配等. 用户管理的功能作业区(用户操作)界面如下图4.1-1所示,通过主要的操作按钮和信息内容可知其功能有:新增用户.编辑用户.删除用户.修改密码.设置角色.单独授权.组织调动.用户有效性.用户排序等. 其中,功能操作按钮的状态会根据选择的左侧树型中不同节点和不

权限系统组织管理—具体设计说明书

前言: 上次聚哥让写具体设计文档.自己也写了自己模块的,认为写的挺好的.可是后来娥接手权限.我跟她说权限逻辑的时候,才发现非常多东西在具体设计文档中都没有写出来,所下面一个人接手的话,又要跑来问好多逻辑的问题.每一次都要做非常多反复性的工作.还有上次.做PB中期验收的毕业设计的时候,我没有下载到直接带着数据库的,可是材料中有数据库说明书,写的特别具体.所以我就依照别人的数据库说明书,搭建起来了,系统也成功跑起来了.这个时候认为这些文档特别的实用.所以,我想,别人看了我的具体设计说明书,是不是也可

Asp.Net Core 项目实战之权限管理系统(6) 功能管理

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十二节--小结,Bootstrap Table之角色管理

返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 很多人说ABP不适合高并发大型,有一定的道理,但是我觉得还是可以的,就看架构师的能力了,我之前公司就是ABP绝对百万数据级项目,是一个在线教育网站,涉及到平台,学院,院系,班级,课程,学生等,一个平台多少大学,一个大学多少院系,一个院系多少班级多少课程,其负责程度一点都不简单,不说了,那是大神,比我在园子看到绝对大多数架构师都强悍.是我等仰望都对象.但是这不是停下脚步仰望的理由,只会是我们追求更强的脚步. 软件

RBAC权限管理系统

权限控制应该是分为3类: 菜单级别 页面元素级别 数据级别 RBAC介绍 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般是多对多的关系.(如下图) 角色是什么?可以理解为一定数量的权限的集合,权限的载体.例如:一个OA系统,"管理员"."

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

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

通用权限管理系统数据权限设置功能解析

在权限管理系统中,数据权限是比较难的,在我们通用权限系统中,数据权限指的是用户基于某个权限域对某些基础数据的操作权限,如上图,公司管理这个菜单被定义是数据权限,表示某些人在公司管理是可指定访问哪些基础数据,这个要与应用结合.如下图,可以限制该9999xudeng003用户在公司管理页面只能管理其中的几个公司. 目前基于用户的数据权限BS的管理功能已完成,这个是权限系统最难开发的一部分. 下面是MVC控制器调的通用权限管理系统底层的方法: //---------------------------

XMwoods通用版权限管理系统 .net 联系QQ:847129860

XMwoods通用版权限管理系统 主要功能有:权限管理.角色管理.部门管理.用户管理.公司管理.模块管理.系统设置.一. 权限管理以关键字(Key)的方式来定义系统的权限,使系统权限分配更加贴合企业需求.提供给开发人员使用,权限的控制需要与系统功能的实现挂接.● 权限管理界面,可以进行系统权限的定义操作.● 用户权限管理,对用户权限进行自定义设置,也可以继承其他用户.角色 等权限.● 角色权限管理,对角色权限进行自定义设置,也可以继承其他角色 等权限.二.角色管理系统实现了内部员工户角色的统一管

Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实