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配置===================================

posted @ 2017-03-17 19:07  狼牙者.net  阅读(135)  评论(0)    收藏  举报