Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理
在实际的系统应用环境中,用户的分级管理一般也是比较常见的功能,小的业务系统可以不需要,但是一般涉及到集团、分子公司、或者是事业单位里面的各个处室或者某某局的人员管理,这些分级管理就显得比较必要,否则单靠管理员来处理账号的事情,是比较麻烦一点的。分级管理就是让不同层次、不同机构的人员实现一定的自治管理,如分公司的人员有专门的管理员,各地区的处室或者某某局实现内部人员的创建、调整、角色分配等工作。本篇随笔主要介绍在我的权限系统中如何实现人员的分级管理的,给大家提供相应的思路和样例参考。
1、用户分级管理的处理逻辑
我们可以把管理员用户分为两级,超级管理员和公司管理员,超级管理员可以管理系统所有用户和全局配置,公司管理员只能管理自己所在公司的人员信息及相关数据。这样我们就比较清晰具体的用户角色负责哪些信息,以便进行有效的过滤和控制了。
为了实现用户的角色控制,我们需要在用户登陆后,获取用户的信息和角色列表信息(一个用户有多个角色的),把它们放置到系统的全局变量里面。
/// <summary>
/// 登录用户信息
/// </summary>
public UserInfo UserInfo { get; set; } /// <summary>
/// 用户具有的角色集合
/// </summary>
public List<RoleInfo> RoleList { get; set; }
在用户登陆成功后,我们就可以把用户信息和角色列表信息赋值给上面的变量,从而可以在本地实现更好的控制管理。通过UserIsAdmin的函数管理,可以只允许管理员级别(超级管理员和公司管理)的用户进行权限系统的登陆。
try
{
string ip = NetworkUtil.GetLocalIP();
string macAddr = HardwareInfoHelper.GetMacAddress();
string loginName = this.txtUserName.Text.Trim(); string identity = BLLFactory<User>.Instance.VerifyUser(loginName, this.txtPassword.Text, "Security", ip, macAddr);
if (!string.IsNullOrEmpty(identity))
{
if (BLLFactory<User>.Instance.UserIsAdmin(loginName))
{
UserInfo info = BLLFactory<WHC.Security.BLL.User>.Instance.GetUserByName(loginName);
Portal.gc.UserInfo = info; //赋值给全局变量“管理用户”
Portal.gc.RoleList = BLLFactory<WHC.Security.BLL.Role>.Instance.GetRolesByUser(info.ID);//用户的角色集合 bLogin = true;
this.DialogResult = DialogResult.OK;
}
else
{
MessageDxUtil.ShowWarning("该用户没有管理员权限");
return;
}
}
else
{
MessageDxUtil.ShowWarning("用户名或密码错误或被禁止登陆");
return;
}
}
catch (Exception err)
{
MessageDxUtil.ShowError(err.Message);
}
然后需要判断用户的角色是否符合要求,创建一个判断函数即可。
/// <summary>
/// 判断当前用户具有某个角色
/// </summary>
/// <param name="roleName">角色名称</param>
/// <returns></returns>
public bool UserInRole(string roleName)
{
bool result = false;
if (RoleList != null)
{
foreach (RoleInfo info in RoleList)
{
if (info.Name.Equals(roleName, StringComparison.OrdinalIgnoreCase))
{
result = true;
break;
}
}
}
return result;
}
我们知道,不同角色的用户管理的级别数据不同,很大程度上是他们负责的树节点层次不同,因此对于组织结构,我们可以根据用户不同的角色进行构造。
超级管理员,组织机构从顶级节点开始递归显示。
公司管理员,组织机构从所在公司节点开始递归显示。
具体的逻辑代码就是如下所示。
/// <summary>
/// 根据当前用户身份,获取对应的顶级机构管理节点。
/// 如果是超级管理员,返回集团节点;如果是公司管理员,返回其公司节点
/// </summary>
/// <returns></returns>
public OUInfo GetMyTopGroup()
{
OUInfo groupInfo = null;
if (UserInRole(RoleInfo.SuperAdminName))
{
groupInfo = BLLFactory<OU>.Instance.GetTopGroup();//超级管理员取集团节点
}
else
{
groupInfo = BLLFactory<OU>.Instance.FindByID(UserInfo.Company_ID);//公司管理员取公司节点
}
return groupInfo;
}
例如人员的组织机构分类,就可以通过下面的代码进行不同的限定
/// <summary>
/// 初始化组织机构列表
/// </summary>
private void InitDeptTreeview()
{
this.treeDept.BeginUpdate();
this.treeDept.Nodes.Clear(); OUInfo groupInfo = Portal.gc.GetMyTopGroup();
if (groupInfo != null)
{
TreeNode topnode = new TreeNode();
topnode.Text = groupInfo.Name;
topnode.Name = groupInfo.ID.ToString();
topnode.ImageIndex = Portal.gc.GetImageIndex(groupInfo.Category);
topnode.SelectedImageIndex = Portal.gc.GetImageIndex(groupInfo.Category);
topnode.Tag = string.Format("Company_ID='{0}' ", groupInfo.ID);
this.treeDept.Nodes.Add(topnode); List<OUNodeInfo> list = BLLFactory<OU>.Instance.GetTreeByID(groupInfo.ID);
AddOUNode(list, topnode);
} this.treeDept.ExpandAll();
this.treeDept.EndUpdate();
}


2、用户分级管理的界面显示
用户分级,前面说到,分为了超级管理员和公司管理员,超级管理员用来管理整个系统的相关用户以及全局的设置;公司管理员用来管理分公司的人员信息。
我们使用超级管理员登陆权限管理系统,可以看到权限系统的全部功能,超级管理员的界面效果如下所示。

公司管理员登陆权限系统后,主界面效果如下所示。其中我们可以看到,对于功能、菜单的定义模块,公司管理员没有权限进行配置,而且用户仅仅能够管理属于自己公司的人员,如下所示 。

角色管理也是只能管理所属公司的角色信息,如下所示。

其他模块,也是只能根据自己公司范围进行查找,如操作日志,登陆日志等信息。

Winform开发框架之权限管理系统改进的经验总结(4)--用户分级管理的更多相关文章
- Winform开发框架之权限管理系统改进的经验总结(2)-用户选择界面的设计
在上篇总结随笔<Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用>介绍了权限管理模块的用户管理部分,其中主要介绍了其中的用户所属公司 ...
- Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用
最近一直在做一些技术性的研究和框架改进工作,博客也落下好几天没有更新了,也该是时候静下心来,总结这段时间的一些技术改进的经验了.和上一阶段的CRM系统开发和技术研究一样,我都喜欢在一个项目或者模块完成 ...
- Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...
- Winform开发框架之权限管理系统改进的经验总结(3)-系统登录黑白名单的实现
在一般的权限系统里面,可能经常会看到系统的黑名单或者白名单的拦截功能.在一般权限系统里面,常见的黑名单就是禁止用户在某些IP上登录系统,白名单就是允许用户只在某些IP上登录系统.本随笔主要介绍在我的权 ...
- Winform开发框架之权限管理系统的改进
权限管理系统,一直是很多Mis系统和一些常见的管理系统所需要的,所以一般可以作为独立的模块进行开发,需要的时候进行整合即可,不需要每次从头开发,除非特殊的系统需求.我在Winform开发框架介绍中的随 ...
- Winform开发框架之权限管理系统
本文章转载:http://www.cnblogs.com/wuhuacong/archive/2011/05/08/2040620.html 至此,权限管理模块介绍已经完毕,下面给出一个调用例子Dem ...
- Web开发框架之权限管理系统
Web开发框架之权限管理系统 记得我在很早之前,开始介绍我的Winform开发框架和我的WCF开发框架之初,我曾经给出下面的视图,介绍我整理的一个框架体系,其中包含有WInform开发框架以及我的We ...
- Winform开发框架之权限管理系统功能介绍
权限管理系统的重要特性总结: 1) 高度集成的权限系统.独立模块,能快速整合使用.2) 符合权限的国际通用标准,基于RBAC(基于角色的访问控制)的角色权限控制.3) 多数据库架构支持,内置支持Sql ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第十一节--Bootstrap Table用户管理列表以及Module Zero之用户管理
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 用户实体 用户实体代表应用的一个用户,它派生自AbpUser类,如下所示: public class User : ...
随机推荐
- linq to entity 获取项的集合总数
IEnumerable<InspecReportsContextEntity> OnenewDate = lisConAll.Where(p => p.inspectime == t ...
- LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间
LOB字段存放在指定表空间 清理CLOB字段及压缩CLOB空间 把LOB字段的SEGMENT 存放在指定表空间.清理CLOB字段及压缩CLOB空间 1.创建LOB字段存放表空间:create ...
- 关于Asp.Net MVC 中 UpdateModel 的未能更新***模型的 解决方案!
解决方案参考: http://blog.csdn.net/hudaijun/article/details/7293129 想法: 其实,不用UpdateModel,虽然笨些,但不会出什么古怪问题.当 ...
- Visual Studio 压力测试注意点
常用的三个测试:单元测试.web性能分析.压力测试:前两个好说,压力测试的时候如果配置不注意,往往不成功. 默认压力测试的测试结果存储在微软云端的,(visual studio online),国内一 ...
- 微信中直接下载APK
某天在微信中偶遇一个二维码,识别二维码竟然可以直接下载APK! 该二维码如下: 解码后获得地址:(在线解码工具) http://www.rmdown.com/newt66y.apk 这不就是个普通的A ...
- CentOS 7.0系统安装配置LAMP服务器(Apache+PHP+MariaDB)
CentOS 7.0接触到的用户是比较少的,今天看了站长写了一篇关于centos7中安装配置LAMP服务器的教程,下面我把文章稍加整理一下转给大家学习交流,希望例子能给各位带来帮助哦. cento ...
- yii2高级应用
public function searchWithRelated() { $criteria = new CDbCriteria; $criteria->together = ...
- Oracle10g新特性——正则表达式 - 转
在进行查询时,有时候需要按照一定的特殊规则来查找某个字符串,比如,你可能需要查询第三位为5-8,最后四位为’8888’的所有电话.在9i之前,你可能需要写一个很复杂的条件:Select usernam ...
- android studio ndk使用openMP
好久没碰ndk了,之前都是在eclipse下写makefile配置c++程序的,现在发现主流都是用android studio,eclipse俨然已经被遗弃了,正好最近项目需要用openMP做算法加速 ...
- Microsoft 2013 新技术学习笔记 三
什么是代码结构的组织?asp.net MVC 5 默认创建出的几个目录的标准含义分别如下: Controllers目录存放MVC模式中的Controler Models目录存放MVC模式中的Model ...