此系统能满足一般权限/菜单控制需求,不需要重复开发,达到多系统共用的目的

权限判断是基于请求路径,意味着是页面级控制,可能不符合一些要求,当然你也可以把路径细化实现

菜单为二级菜单,暂不支持多级

此系统基于CRL框架内置业务开发,CRL框架详细信息

运行环境 .Net Mvc4 默认数据库MSSQL

此权限系统主要概念

  • 系统(属于哪个系统,分平台进行权限控制)
  • 菜单(跟系统挂钩,此系统有哪些菜单)
  • 角色(有哪些角色)
  • 用户(有哪些用户,跟角色挂钩)
  • 权限(角色或用户有哪些菜单的权限)

菜单

菜单结构如下,主要属性

  • 名称
  • 路径(菜单访问路径)
  • 导航显示(是否在菜单列表显示)
  • 是否禁用

菜单子级

角色

角色权限

用户

用户权限

用户权权限继承角色权限,只会多,不会少,继承的权限不能更改

设置好这些,权限系就能正常工作了,需要进行权限控制的项目需要部署权限控制,菜单效果如下

布署权限控制,以MVC为例

  登录

  因为用户是在权限系统里,所以登录也由权限系统来提供  

public ActionResult Login(string userName, string passWord, string verifyCode)
{
string error; bool a = CRL.RoleAuthorize.EmployeeBusiness.Instance.CheckPass(userName, passWord, out error);//验证密码
if (!a)
{
ModelState.AddModelError("", error);
return View();
} var u = CRL.RoleAuthorize.EmployeeBusiness.Instance.QueryItem(b => b.AccountNo == userName);
CRL.RoleAuthorize.EmployeeBusiness.Instance.Login(u, "admin", false);//FORM 验证登录
CRL.RoleAuthorize.MenuBusiness.Instance.RemoveUserMenuCache(u.Id, );//清除用户菜单缓存
string returnUrl = Request["returnUrl"];
if (string.IsNullOrEmpty(returnUrl))
{
returnUrl = "/";
}
return Redirect(returnUrl);
}

  布署菜单

  登录后需要显示当前用户可用菜单

  获取菜单分组

var menus = new Dictionary<CRL.RoleAuthorize.Menu, List<CRL.RoleAuthorize.Menu>>();
string url = System.Web.HttpContext.Current.Request.Url.PathAndQuery.ToLower(); var currentUser = CRL.RoleAuthorize.EmployeeBusiness.Instance.CurrentUser;//获取当前登录用户
  //获取系统编号为1的菜单,注意改这里
menus = CRL.RoleAuthorize.MenuBusiness.Instance.GetUserMenuByGroup(CRL.RoleAuthorize.EmployeeBusiness.Instance.CurrentUser.Id, );

  显示菜单

@foreach (var item in menus.Keys)//循环主菜单
{
var childs = menus[item];
<h2>@item.Name</h2>
<ul>
@foreach (var item2 in childs)//子菜单
{
if (!item2.ShowInNav)//不在导航显示则跳过
{
continue;
}
<li>
<a href="@item2.Url" title="@item2.Name">@item2.Name</a>
</li>
}
</ul>
}

  实现权限控制

  MVC路径都是基于控制器的,很好控制,在基类实现权限检测方法  

/// <summary>
/// 对应当前系统ID
/// </summary>
int currentSystemId = ;
/// <summary>
/// 当前登录用户
/// </summary>
public CRL.Person.IPerson CurrentUser
{
get
{
return CRL.RoleAuthorize.EmployeeBusiness.Instance.CurrentUser;
}
}
/// <summary>
/// 访问权限检查,按当前请求路径
/// </summary>
/// <returns></returns>
public bool CheckAccess()
{
bool a = CRL.RoleAuthorize.AccessControlBusiness.Instance.CheckAccess(currentSystemId, CurrentUser.Id);
return a;
}

  在控制器方法里调用该方法

public ActionResult Update()
{
if (!CheckAccess())
{
return Content("没有权限");
}
return Content("访问成功");
}

到这里,权限系统就能正常工作了,由于使用了缓存,菜单查找效率非常高,可能会造成菜单不同步的情况,需要清空缓存

项目里自带了一个测试项目,更改项目里DBConnection文件夹,.config数据连接文件,连接正确的SQL数据库

运行RoleControl项目,登录 用户名:admin 密码:admin (如需更改,更改/config/CustomSetting.config) 加入测试菜单

运行RoleControlWebTest 登录 用户名:test 密码:test

项目下载地址: 百度盘

最新3.0代码请入群获取

CRL通用权限控制系统的更多相关文章

  1. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

  2. 多租户通用权限设计(基于casbin)

    多租户通用权限设计(基于 casbin) 所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断. 权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中 ...

  3. ASP.net MVC 基于角色的权限控制系统的实现

    一.引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法. 下面是最常见的实现方式: public class Custom ...

  4. AppBoxPro - 细粒度通用权限管理框架(可控制表格行内按钮)源码提供下载

    特别声明: 提供的源代码已经包含了 AppBoxPro 的全部源代码,用 VS2012 打开项目后,直接 Ctrl+F5 可以运行起来(默认使用VS自带的LocalDB数据库). FineUIPro是 ...

  5. winform快速开发平台 -> 通用权限管理之动态菜单

    这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议. 先说一下我们的权限管理的的设计思路,首先一个企业信息化管理系统一定会用到权限管理, ...

  6. Net 通用权限管理系统源码 带数据库设计文档,部署说明文档

    Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389

  7. 基于吉日嘎拉的通用权限管理Webform版老界面bug修复

    虽然弄了新界面<基于吉日嘎底层架构的通用权限管理Web端UI更新:参考DTcms后台界面>,但老界面的一点菜单显示的问题还是让我这种强迫症揪心,终于今晚可以美美的睡觉了. 老代码用了Ses ...

  8. 基于吉日嘎底层架构的通用权限管理Web端UI更新:参考DTcms后台界面

    经一周的研究学习,看了国内的H+.HUI等,国外的PaperDashboardPro.Make.Metronic BootStrap等,最终选定用一个轻量的,适合中国人的,来自DTcms的后台管理UI ...

  9. 通用权限管理系统数据字典 V3.9 版本,欢迎开发个各种业务系统的朋友们,参考表结构

    C#.NET通用权限管理系统组件数据字典 导  航 ◇ (01) BaseItemDetails ◇ (02) BaseItems ◇ (03) BaseLog ◇ (04) BaseMessage ...

随机推荐

  1. About_PHP读写文件

    1.PHP部分文件操作函数:fopen ,fread ,filesize,fwrite,fclose 2.unlink() rmdir() 删除函数 unlink() 删除文件函数:unlink(路径 ...

  2. 优化curl并发使用

    经典curl并发的处理流程:首先将所有的URL压入并发队列, 然后执行并发过程, 等待所有请求接收完之后进行数据的解析等后续处理. 在实际的处理过程中, 受网络传输的影响, 部分URL的内容会优先于其 ...

  3. indexOf、instanceOf、typeOf、valueOf详解

    1.indexOf() 该方法用来返回某个指定的字符串值在字符串中首次出现的位置. 语法:indexOf(searchvalue,fromindex);两个参数,参数一表示查询的字符串值,参数二可选表 ...

  4. Python模块之常用模块,反射以及正则表达式

    常用模块  1. OS模块 用于提供系统级别的操作,系统目录,文件,路径,环境变量等 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("di ...

  5. Unity自动寻路Navmesh之入门

    实例 我们要实现一个功能:点击场景中的一个位置,角色可以自动寻路过去.角色会绕过各种复杂的障碍,找到一条理论上”最短路径“. 步骤 1.创建地形 2.添加角色 3.创建多个障碍物,尽量摆的复杂一点,来 ...

  6. 安装使用Oracle OSWbb/OSWbba工具

    OSWbb是收集数据,OSWbba 是分析数据,在OSWbb4.0以后,OSWbba已经绑定在OSWbb内. 1.创建目录,上传/解压安装包 [oracle@std ~]$ mkdir oswbb [ ...

  7. 判断是PC端还是移动端

    http://detectmobilebrowsers.com/ 此网站提供了各种编程语言(包括 Apache.ASP.ASP.NET.C#. IIS. JSP. JavaScript. jQuery ...

  8. mongoose 和 mongoDB

    第三方学习地址:http://blog.csdn.net/foruok/article/details/47746057 下载mongoDB https://www.mongodb.com/downl ...

  9. SQL SERVER全面优化-------索引有多重要?

    想了好久索引的重要性应该怎么写?讲原理结构?我估计大部分人不愿意看,也不愿意花那么多时间仔细研究.光写应用?感觉不明白原理一样不会用.举例说明?情况太多也写不全....到底该怎么写呢? 随便写吧,想到 ...

  10. 基于zookeeper实现统一资源管理

    分布式系统中经常涉及到配置资源的管理,比如,一个应用系统需要部署在多台服务器上,但是他们拥有某些的配置项是相同的,如果配置变更,需要修改这些配置,那么需要同时修改每台服务器,这样做比较麻烦而且容易出错 ...