mvc给用户设置角色主要步骤

1.IBLL层

添加方法声明

public partial interface IUserInfoService:IBaseService<UserInfo>
{
//oh ,my baby,oh ,my baby

IQueryable<UserInfo> LoagPageData(Model.Param.UserQueryParam userQueryParam);

bool SetRole(int userId, List<int> roleIds);
}

  BLL层  方法实现 :现将原来的角色全部删除,在重新添加角色(存放在集合中)

  public bool SetRole(int userId, List<int> roleIds)
        {
            var user = DbSession.UserInfoDal.GetEntities(u => u.ID == userId).FirstOrDefault();
            user.RoleInfo.Clear();//全剁掉。

            var allRoles = DbSession.RoleInfoDal.GetEntities(r => roleIds.Contains(r.ID));
            foreach (var roleInfo in allRoles)
            {
                user.RoleInfo.Add(roleInfo);//加最新的角色。
            }
            DbSession.SaveChanges();
            return true;
        }

  2.控制器 UserInfoController

        public ActionResult SetRole(int id)
        {
            //当前要设置角色的用户
            int userId = id;
            
            UserInfo  user= UserInfoService.GetEntities(u => u.ID == id).FirstOrDefault();

            //把所有的角色发送 到前台
            ViewBag.AllRoles = RoleInfoService.GetEntities(u => u.DelFlag == delflagNormal).ToList();

            //用户已经关联的角色发送到前台。
            ViewBag.ExitsRoles = (from r in user.RoleInfo
                                  select r.ID).ToList();

            return View(user);

        }

  3.view层中 设置选择给用户选择角色的界面

<div>
         <h2>当前给用户:  @Model.UName 设置角色</h2>
        <hr />
        @{
            //所有的角色
            List<LTeasyOA.Model.RoleInfo> allRoles = ViewBag.AllRoles;
            //所有当前用户已经存在的角色
            List<int> existRoleIdList = ViewBag.ExitsRoles;

            using (Ajax.BeginForm("ProcessSetRole", "UserInfo", new AjaxOptions() { OnSuccess = "afterSetRole" }))
            {

            <input type="hidden" name="UId" value="@Model.ID"/>
                
            
                foreach (var roleInfo in allRoles)
                {
                    string str = "ckb_" +roleInfo.ID;
                    if (existRoleIdList.Contains(roleInfo.ID))
                    {
                        <input type="checkbox" checked="checked" value="@str" name="@str" id="@str"/>
                    }
                    else
                    {
                        <input type="checkbox"  value="@str" name="@str" id="@str"/>
                    }
                    
                    <label for="@str">@roleInfo.Name</label>
            
                    <br />
                 

                }
            }
        }
    </div>

  4.提交选择的角色到数据库中

   public ActionResult ProcessSetRole(int UId)
        {
            //第一:当前用户id  --uid
            //第二:所有打上对勾的 角色。 ---> list
            List<int> setRoleIdList =new List<int>();
            foreach (var key in Request.Form.AllKeys)
            {
                if (key.StartsWith("ckb_"))
                {
                    int roleId = int.Parse(key.Replace("ckb_", ""));
                    setRoleIdList.Add(roleId);
                }
            }

            UserInfoService.SetRole(UId, setRoleIdList);
            return Content("ok");

        }

  权限设计数据库设计 关联表会在数据库中自动生成(RoleInfo,R_UserInfo_ActionInfo)

 

 

 

DbSession是数据库上下文,即联系数据库datebase和.net的中间变量,用已操作数据库的最底层

类似 Dbcontext 直接可以可取表变量

 

 

在mvc中只是简单的处理一下

 

 BaseService中CurrentDal只能获取当前Services的类型的Dal

dbSession在这里理论是取所有的_Dal层表 ,但是在这里 只声明,未赋值,要想取到其他_Dal在这里只能在Spring.net中注册,给DbSession注册所有_DAl或者在_Service中注册只用得到的_Dal,,,,,或者直接在代码中赋值(比较好)

 

posted on 2017-06-21 09:50  lkjhgfdsa123  阅读(305)  评论(0编辑  收藏  举报