现在只是打算做一个最简单的权限管理只涉及页面权限不设置数据权限或者操作权限(四张表解决问题)
可扩展性稍微高点 要加数据权限或者操作权限未尝也不是不可以,看个人吧 我才开始可能想的不是那么
全面,欢迎大佬拍砖带带我这个菜鸡~
废话不多说直接上代码
1.SQL结构
create database QXDBTest go use QXDBTest go create table UserInfo( id int primary key identity(1,1),--主键 name varchar(50),--名称 zid int not null --职位ID ) --职位表 create table ZwInfo( zid int primary key identity(1,1),--职位ID 对应用户 zname varchar(50) ) --菜单表 create table Menu( menuid int primary key identity(1,1), --菜单ID menuname varchar(50), --菜单名称 menuurl varchar(200)--菜单路径 ) --权限表 create table QxInfo( qxid int primary key identity(1,1), --主键 qxname varchar(200),--主键名称 Menuid int, --菜单Id zid int --职位Id )
不要在意命名啦,我只是做了一个demo 到时候放到项目上的时候会正规的啊哈哈
基本逻辑就是权限表去查询对应的ID有哪些菜单ID 再去根据菜单ID去判断哪些页面是可以访问的哪些页面是不可以访问的
不过我刚才看了下还有更方便的方法现在这个第一版就是这么做的了,只要数据库设计好了 代码运行起来就简单了很多了
废话不多说接着看代码;
首先创建HomeController 先写个登录
[HttpPost] public JsonResult Index(string name) { QXDBTestEntities _db = new QXDBTestEntities(); try { var list = _db.UserInfo.Where(p => p.name == name).ToList(); if (list.Count > 0) { Session["User"] = list; return Json("ok"); } else { return Json("No"); } } catch (Exception ex) { throw ex; } }
我做了个简单的只有用户名到时候有要设计的可以酌情添加自己需要的参数不多赘述了~
然后创建BaseController 重写 Initialize 方法~上代码
protected override void Initialize(RequestContext requestContext) { //这个Session存储的是用户信息(泛型) if (requestContext.HttpContext.Session["User"] != null) { try { //获取list List<UserInfo> li = (List<UserInfo>)requestContext.HttpContext.Session["User"]; if (li.Count > 0) { //拼接获取控制器加视图的地址 Dictionary<string, object>.ValueCollection list = requestContext.RouteData.Values.Values; var pp = list.ToArray(); //拼接字符串 string str = "/" + pp[0] + "/" + pp[1]; //根据zid 去查询权限表 QXDBTestEntities _db = new QXDBTestEntities(); int id = li[0].zid; List<QxInfo> qxlist = _db.QxInfo.Where(p => p.zid == id).ToList(); List<Menu> menulist = new List<Menu>(); //获取权限ID 根据权限ID 查询到底有哪些页面可以访问 for (int i = 0; i < qxlist.Count; i++) { int id1 = Convert.ToInt32(qxlist[i].Menuid); List<Menu> me = _db.Menu.Where(z => z.menuid == id1).ToList(); if (me.Count > 0) { menulist.Add(me.FirstOrDefault()); } } if (menulist.Exists(pz => pz.menuurl == str)) { base.Initialize(requestContext); } else { requestContext.HttpContext.Session["User"] = null; requestContext.HttpContext.Response.Redirect("/Home/Wqcz"); } } } catch (Exception ex) { throw ex; } } else { base.Initialize(requestContext); } }
基本大功告成 我随便输入一些数据看看
基本已经成型了 到时候就是集成项目了