5.MVC层直接的关系
================================查权限,存入Session中==========================
1.按理是找业务层要:在操作上下文里面:OperateContext.BLLSession.IOu_UserInfoBLL里面没有方法帮我们查询权限。先到数据查询出来:
1.用户登陆后,先查询角色,在根据角色查询角色的权限,在根据角色权限查询所以权限。
2.根据用户,所在部门把特权查询出来。
select* from Ou_UserRole our where our.urId=3 //查询用户角色等于3的。
select urRId from Ou_UserRole our where our.urId=3 //用户角色urRId等于3的。
select * from Ou_Role or1 where or1.rId in(
select urRId from Ou_UserRole our where our.urId=3) //查询用户角色等于3的信息。
select rId from Ou_Role or1 where or1.rId in(
select urRId from Ou_UserRole our where our.urId=3)//查询用户角色rId
select * from Ou_RolePermission where rpRId in(select urRId from Ou_UserRole our where our.urUId=3)//查询用户角色等3的,所有角色用户权限。
select * from Ou_Permission op where op.pid in(
select rpPId from Ou_RolePermission where rpRId in(
select urRId from Ou_UserRole our where our.urUId=3
)) //查询用户角色等于3的,所有权限。
3.如果用ef查询的话,光拿某一张表的,数据类,业务类的对象,是查询权限是查不完整。也就是说在某个地方可以查询三个表业务操作类,数据仓储。
OperateContext //上下文业务仓储类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MVCOA.Helper { /// <summary> /// 网站操作上下文(表现层添加业务上下文) /// </summary> public class OperateContext { //IBLL.IBLLSession仓储接口; DI.SpringHelper.GetObject<T>()//Spring.Net上下文容器(工厂) public static IBLL.IBLLSession BLLSession = DI.SpringHelper.GetObject<IBLL.IBLLSession>("BLLSession"); } }
//查询用户登陆权限
public static void GetUserPermission(int usrId) { //BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId);//查询角色id //1.0根据用户 id 查到 该用户的 角色id List<int>listRoleId=BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId).Select(ur=>ur.urRId).ToList();//查询用户角色id //2.0根据角色id查询角色 权限id List<int> listPerIds = new List<int>(); foreach (int roleId in listRoleId)//3.0遍历所有角色 { //4.查询所有的角色权限id,然后加到listRoleId角色id集合上 BLLSession.IOu_RolePermissionBLL.GetListBy(rp => rp.rpPId == roleId).ForEach(rp => listRoleId.Add(roleId)); } }
4.使用BLLSession查询用户登陆权限(改进版)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MVCOA.Helper { /// <summary> /// 网站操作上下文(表现层添加业务上下文) /// </summary> public class OperateContext { //IBLL.IBLLSession仓储接口; DI.SpringHelper.GetObject<T>()//Spring.Net上下文容器(工厂) public static IBLL.IBLLSession BLLSession = DI.SpringHelper.GetObject<IBLL.IBLLSession>("BLLSession"); public static void GetUserPermission(int usrId) { //BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId);//查询角色id //1.0根据用户 id 查到 该用户的 角色id List<int>listRoleId=BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId).Select(ur=>ur.urRId).ToList();//查询用户角色id // //2.0根据角色id查询角色 权限id //List<int> listPerIds = new List<int>(); //foreach (int roleId in listRoleId)//3.0遍历所有角色 //{ //4.查询所有的角色权限id,然后加到listRoleId角色id集合上 // BLLSession.IOu_RolePermissionBLL.GetListBy(rp => rp.rpPId == roleId).ForEach(rp => listRoleId.Add(roleId)); //} //2.0根据角色id查询角色 权限id List<int>listPerIds= BLLSession.IOu_RolePermissionBLL.GetListBy(rp => listRoleId.Contains(rp.rpRId)).Select(rp => rp.rpRId).ToList(); //3.0查询所有角色数据(用户权限表) List<MODEL.Ou_Permission>listPermission=BLLSession.IOu_PermissionBLL.GetListBy(p => listPerIds.Contains(p.pid)).ToList(); } } }
5.使用BLLSession查询用户登陆权限(改进版)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MODEL; namespace MVCOA.Helper { /// <summary> /// 网站操作上下文(表现层添加业务上下文) /// </summary> public class OperateContext { //IBLL.IBLLSession仓储接口; DI.SpringHelper.GetObject<T>()//Spring.Net上下文容器(工厂) public static IBLL.IBLLSession BLLSession = DI.SpringHelper.GetObject<IBLL.IBLLSession>("BLLSession"); #region 1.0根据用户id查询用户权限+List<MODEL.Ou_Permission> GetUserPermission(int usrId) public static List<MODEL.Ou_Permission> GetUserPermission(int usrId) { //BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId);//查询角色id //1.0根据用户 id 查到 该用户的 角色id List<int> listRoleId = BLLSession.IOu_UserRoleBLL.GetListBy(ur => ur.urUId == usrId).Select(ur => ur.urRId).ToList();//查询用户角色id // //2.0根据角色id查询角色 权限id //List<int> listPerIds = new List<int>(); //foreach (int roleId in listRoleId)//3.0遍历所有角色 //{ //4.查询所有的角色权限id,然后加到listRoleId角色id集合上 // BLLSession.IOu_RolePermissionBLL.GetListBy(rp => rp.rpPId == roleId).ForEach(rp => listRoleId.Add(roleId)); //} //2.0根据角色id查询角色 权限id List<int> listPerIds = BLLSession.IOu_RolePermissionBLL.GetListBy(rp => listRoleId.Contains(rp.rpRId)).Select(rp => rp.rpRId).ToList(); //3.0查询所有角色数据(权限) List<MODEL.Ou_Permission> listPermission = BLLSession.IOu_PermissionBLL.GetListBy(p => listPerIds.Contains(p.pid)).Select(p => p.ToPOCO()).ToList();//ToPOCO()安全考虑不分类,达到共享,同名方法共享,实例化。 //-------------B.根据用户特权查询 //b.1查询 用户特权id List<int> vipPerIds = BLLSession.IOu_UserVipPermissionBLL.GetListBy(vip => vip.vipUserId == usrId).Select(vip => vip.vipPermission).ToList(); //b.2 查询 特权数据 List<MODEL.Ou_Permission> listPermssion2 = BLLSession.IOu_PermissionBLL.GetListBy(p => vipPerIds.Contains(p.pid)).Select(p => p.ToPOCO()).ToList();//ToPOCO()安全考虑,partoal不分类,达到共享,同名方法共享,实例化。 //------C.将连个权限集合 合并(将集合2的权限数据 添加到 集合1中) listPermssion2.ForEach(p => { listPermission.Add(p); }); return listPermission.OrderBy(u => u.pOrder).ToList(); } #endregion } }
控制器AdminController
权限存入session对象
using MVCOA.Helper; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.Mvc; namespace MVCOA.Login.Admin { /// <summary> /// 管理员登陆等相关业务 /// </summary> public class AdminController : Controller { #region 1.0 管理员登陆页面 +ActionResult Login() /// <summary> /// 1.0 管理员登陆页面 /// </summary> /// <returns></returns> [HttpGet] public ActionResult Login() { return View(); } #endregion #region 1.0 管理员登陆页面 +ActionResult Login() /// <summary> /// 1.0 管理员登陆页面 /// </summary> /// <returns></returns> [HttpPost] public ActionResult Login(FormCollection form) { MODEL.FormatModel.AjaxMsgModel ajaxM = new MODEL.FormatModel.AjaxMsgModel() { Statu = "err", Msg = "失败~~!" }; //1.1获取数据 string strName = form["txtName"]; string strPwd = form["txtPwd"]; //1.2验证(自己做) //1.3通过操作上下文获取 用户业务接口对象,调用里面的登陆方法! //BLLSession//数据仓储 MODEL.Ou_UserInfo usr = OperateContext.BLLSession.IOu_UserInfoBLL.Login(strName, strPwd);//扩展登录Login if (usr != null) { //2.1保存 用户数据(Session or Coookie) //为了安全考虑, MODEL.Ou_UserInfo代理类,改成真正的实体。再存入Cookie Session["aiafo2"] = usr; if (!string.IsNullOrEmpty(form["isAllway"]))//如果选择了复选框,则使用cookie保存数据,要加密 { //2.1.2将用户id加密成字符串 string strCookieValue = Common.SecurityHelper.EncryptUserInfo(usr.uId.ToString());//调用票据加密 //2.1.3创建cookie HttpCookie cookie = new HttpCookie("aiafo2", strCookieValue);//用户id存入Cookie cookie.Path = "/admin/"; cookie.Expires = DateTime.Now.AddDays(1);//失效时间是一天 Response.Cookies.Add(cookie);//发回去 } //2.2查询当前用户的权限,并将权限存入 Session================= List<MODEL.Ou_Permission> listPermission = MVCOA.Helper.OperateContext.GetUserPermission(usr.uId);//usr.uId是用户id Session["OuPermossopm"] = listPermission;//存入Session对象================= ajaxM.Statu = "ok";//Statu状态 ajaxM.Msg = "登陆成功~";//Msg消息 ajaxM.BackUrl = "/admin/admin/index"; //ajaxM.BackUrl = "/home/index"; } return Json(ajaxM); } #endregion public ActionResult Index() { return View(); } } }
======================6.js配置===================================

浙公网安备 33010602011771号