Welcome

首页 / 软件开发 / .NET编程技术 / Winform开发框架之权限管理系统改进的经验总结(5) 用户分级管理

Winform开发框架之权限管理系统改进的经验总结(5) 用户分级管理2014-03-26 伍华聪 在实际的系统应用环境中,用户的分级管理一般也是比较常见的功能,小的业务系统可以不需要,但 是一般涉及到集团、分子公司、或者是事业单位里面的各个处室或者某某局的人员管理,这些分级管理 就显得比较必要,否则单靠管理员来处理账号的事情,是比较麻烦一点的。分级管理就是让不同层次、 不同机构的人员实现一定的自治管理,如分公司的人员有专门的管理员,各地区的处室或者某某局实现 内部人员的创建、调整、角色分配等工作。本篇随笔主要介绍在我的权限系统中如何实现人员的分级管 理的,给大家提供相应的思路和样例参考。

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;}