亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

ASP.NET.4.5.1+MVC5.0設(shè)置系統(tǒng)角色與權(quán)限(一)

 更新時(shí)間:2015年01月27日 10:12:36   投稿:hebedich  
這篇文章主要介紹了ASP.NET.4.5.1+MVC5.0設(shè)置系統(tǒng)角色與權(quán)限的部分內(nèi)容,后續(xù)我們將繼續(xù)討論這個(gè)話題,希望小伙伴們喜歡。

數(shù)據(jù)結(jié)構(gòu)

權(quán)限分配

1.在項(xiàng)目中新建文件夾Helpers

2.在HR.Helpers文件夾下添加EnumMoudle.Cs

復(fù)制代碼 代碼如下:

namespace HR.Helpers
{
    public enum EnumMoudle
    {
        /// <summary>
        /// 模塊
        /// </summary>
        [EnumTitle("用戶(hù)管理")]
        SysUserManage_Role = 102,
        [EnumTitle("機(jī)構(gòu)管理")]
        Department = 201,
        [EnumTitle("人事資料")]
        Employees = 301,
        [EnumTitle("系統(tǒng)管理")]
        BaseInfo = 404,
    }
}

3.在HR.Helpers文件夾下添加ControllerBase.Cs

復(fù)制代碼 代碼如下:

namespace HR.Helpers
{
    public class ControllerBase : Controller
    {
        /// <summary>
        /// 操作人,傳IP....到后端記錄
        /// </summary>
        public virtual Operater Operater
        {
            get
            {
                return null;
            }
        }
        /// <summary>
        /// 分頁(yè)大小
        /// </summary>
        public virtual int PageSize
        {
            get
            {
                return 15;
            }
        }
        protected ContentResult JsonP(string callback, object data)
        {
            var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
            return this.Content(string.Format("{0}({1})", callback, json));
        }
        /// <summary>
        /// 當(dāng)彈出DIV彈窗時(shí),需要刷新瀏覽器整個(gè)頁(yè)面
        /// </summary>
        /// <returns></returns>
        public ContentResult RefreshParent(string alert = null)
        {
            var script = string.Format("<script>{0}; parent.location.reload(1)</script>", string.IsNullOrEmpty(alert) ? string.Empty : "alert('" + alert + "')");
            return this.Content(script);
        }
        public new ContentResult RefreshParentTab(string alert = null)
        {
            var script = string.Format("<script>{0}; if (window.opener != null) {{ window.opener.location.reload(); window.opener = null;window.open('', '_self', '');  window.close()}} else {{parent.location.reload(1)}}</script>", string.IsNullOrEmpty(alert) ? string.Empty : "alert('" + alert + "')");
            return this.Content(script);
        }
        /// <summary>
        /// 用JS關(guān)閉彈窗
        /// </summary>
        /// <returns></returns>
        public ContentResult CloseThickbox()
        {
            return this.Content("<script>top.tb_remove()</script>");
        }
        /// <summary>
        ///  警告并且歷史返回
        /// </summary>
        /// <param name="notice"></param>
        /// <returns></returns>
        public ContentResult Back(string notice)
        {
            var content = new StringBuilder("<script>");
            if (!string.IsNullOrEmpty(notice))
                content.AppendFormat("alert('{0}');", notice);
            content.Append("history.go(-1)</script>");
            return this.Content(content.ToString());
        }
        public ContentResult PageReturn(string msg, string url = null)
        {
            var content = new StringBuilder("<script type='text/javascript'>");
            if (!string.IsNullOrEmpty(msg))
                content.AppendFormat("alert('{0}');", msg);
            if (string.IsNullOrWhiteSpace(url))
                url = Request.Url.ToString();
            content.Append("window.location.href='" + url + "'</script>");
            return this.Content(content.ToString());
        }
        /// <summary>
        /// 轉(zhuǎn)向到一個(gè)提示頁(yè)面,然后自動(dòng)返回指定的頁(yè)面
        /// </summary>
        /// <param name="notice"></param>
        /// <param name="redirect"></param>
        /// <returns></returns>
        public ContentResult Stop(string notice, string redirect, bool isAlert = false)
        {
            var content = "<meta http-equiv='refresh' content='1;url=" + redirect + "' /><body style='margin-top:0px;color:red;font-size:24px;'>" + notice + "</body>";
            if (isAlert)
                content = string.Format("<script>alert('{0}'); window.location.href='{1}'</script>", notice, redirect);
            return this.Content(content);
        }
        /// <summary>
        /// 在方法執(zhí)行前更新操作人
        /// </summary>
        /// <param name="filterContext"></param>
        public virtual void UpdateOperater(ActionExecutingContext filterContext)
        {
            if (this.Operater == null)
                return;
            WCFContext.Current.Operater = this.Operater;
        }
        public virtual void ClearOperater()
        {
            //TODO
        }
        /// <summary>
        /// AOP攔截,在Action執(zhí)行后
        /// </summary>
        /// <param name="filterContext">filter context</param>
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            if (!filterContext.RequestContext.HttpContext.Request.IsAjaxRequest() && !filterContext.IsChildAction)
                RenderViewData();
            this.ClearOperater();
        }
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            this.UpdateOperater(filterContext);
            base.OnActionExecuting(filterContext);
            //在方法執(zhí)行前,附加上PageSize值
            filterContext.ActionParameters.Values.Where(v => v is Request).ToList().ForEach(v => ((Request)v).PageSize = this.PageSize);
        }
        /// <summary>
        /// 產(chǎn)生一些視圖數(shù)據(jù)
        /// </summary>
        protected virtual void RenderViewData()
        {
        }
        /// <summary>
        /// 當(dāng)前Http上下文信息,用于寫(xiě)Log或其他作用
        /// </summary>
        public WebExceptionContext WebExceptionContext
        {
            get
            {
                var exceptionContext = new WebExceptionContext
                {
                    IP = Fetch.UserIp,
                    CurrentUrl = Fetch.CurrentUrl,
                    RefUrl = (Request == null || Request.UrlReferrer == null) ? string.Empty : Request.UrlReferrer.AbsoluteUri,
                    IsAjaxRequest = (Request == null) ? false : Request.IsAjaxRequest(),
                    FormData = (Request == null) ? null : Request.Form,
                    QueryData = (Request == null) ? null : Request.QueryString,
                    RouteData = (Request == null || Request.RequestContext == null || Request.RequestContext.RouteData == null) ? null : Request.RequestContext.RouteData.Values
                };
                return exceptionContext;
            }
        }
        /// <summary>
        /// 發(fā)生異常寫(xiě)Log
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            var e = filterContext.Exception;
            LogException(e, this.WebExceptionContext);
        }
        protected virtual void LogException(Exception exception, WebExceptionContext exceptionContext = null)
        {
            //do nothing!
        }
    }
    public class WebExceptionContext
    {
        public string IP { get; set; }
        public string CurrentUrl { get; set; }
        public string RefUrl { get; set; }
        public bool IsAjaxRequest { get; set; }
        public NameValueCollection FormData { get; set; }
        public NameValueCollection QueryData { get; set; }
        public RouteValueDictionary RouteData { get; set; }
    }
}

4.在項(xiàng)目文件夾中新建ControllerBase.cs

復(fù)制代碼 代碼如下:

namespace HR
{
    public abstract class ControllerBase:HR.Helpers.ControllerBase
    {
        protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
        }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
        }
    }
}

5.在項(xiàng)目中新建RoleControllerBase.cs

復(fù)制代碼 代碼如下:

namespace HR
{
    public class RoleControllerBase : ControllerBase
    {
        SystemUserRepository sysuserrepository = new SystemUserRepository();
        /// <summary>
        /// 用戶(hù)權(quán)限
        /// </summary>
        public virtual List<EnumMoudle> PermissionList
        {
            get
            {
                var permissionList = new List<EnumMoudle>();
                return permissionList;
            }
        }
        public string BusinessPermissionString { get; set; }
        [NotMapped]
        public List<EnumMoudle> BusinessPermissionList
        {
            get
            {
                if (string.IsNullOrEmpty(BusinessPermissionString))
                    return new List<EnumMoudle>();
                else
                    return BusinessPermissionString.Split(",".ToCharArray()).Select(p => int.Parse(p)).Cast<EnumMoudle>().ToList();
            }
            set
            {
                BusinessPermissionString = string.Join(",", value.Select(p => (int)p));
            }
        }
        /// <summary>
        /// Action方法執(zhí)行前沒(méi)有權(quán)限提示信息
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var noAuthorizeAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeIgnoreAttribute), false);
            if (noAuthorizeAttributes.Length > 0)
                return;
            base.OnActionExecuting(filterContext);
            bool hasPermission = true;
            var permissionAttributes = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(PermissionAttribute), false).Cast<PermissionAttribute>();
            permissionAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(PermissionAttribute), false).Cast<PermissionAttribute>().Union(permissionAttributes);
            var attributes = permissionAttributes as IList<PermissionAttribute> ?? permissionAttributes.ToList();
            if (permissionAttributes != null && attributes.Count() > 0)
            {
                 string cookie = CookieHelper.GetValue("SystemUserID");
                 if (string.IsNullOrEmpty(cookie))
                 {
                     filterContext.Result = Content("您沒(méi)有登錄!");
                 }
                 else
                 {
                     int mid = int.Parse(CookieHelper.GetValue("SystemUserID"));
                     var model = sysuserrepository.GetModel(mid);
                     BusinessPermissionString = model.BusinessPermissionString;
                     hasPermission = true;
                     foreach (var attr in attributes)
                     {
                         foreach (var permission in attr.Permissions)
                         {
                             if (!BusinessPermissionList.Contains(permission))
                             {
                                 hasPermission = false;
                                 break;
                             }
                         }
                     }
                     if (!hasPermission)
                     {
                         if (Request.UrlReferrer != null)
                             filterContext.Result = this.Stop("您沒(méi)有權(quán)限!", "/default/ng");
                         else
                             filterContext.Result = Content("您沒(méi)有權(quán)限!");
                     }
                 }
            }
        }
    }
}

6.在每個(gè)Controller繼承RoleControllerBase類(lèi)

public class EmployeesController : RoleControllerBase

7.在HR.Helpers文件夾下添加PermissionAttribute.Cs ,并繼承 FilterAttribute, IActionFilter

復(fù)制代碼 代碼如下:

namespace HR.Helpers
{
    public class PermissionAttribute : FilterAttribute, IActionFilter
    {
        public List<EnumMoudle> Permissions { get; set; }

        public PermissionAttribute(params EnumMoudle[] parameters)
        {
            Permissions = parameters.ToList();
        }

        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            //throw new NotImplementedException();
        }

        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //throw new NotImplementedException();
        }
    }
}

8.然后在Controller或者Action方法加上驗(yàn)證

復(fù)制代碼 代碼如下:

 [Permission(EnumMoudle.Employees),Authorize, ValidateInput(false)]
 [Permission(EnumMoudle.SysUserManage_Role)]

9.在用戶(hù)管理Controller中添加權(quán)限分配,修改方法

復(fù)制代碼 代碼如下:

        #region 添加管理員
        /// <summary>
        /// 添加頁(yè)
        /// </summary>
        /// <param name="model">管理員實(shí)體類(lèi)</param>
        /// <returns></returns>
        [Authorize]
        public ActionResult Add()
        {
            var moudleList = EnumHelper.GetItemValueList<EnumMoudle>();
            this.ViewBag.MoudleList = new SelectList(mouldeList, "Key", "Value");
            return View();
        }
        /// <summary>
        /// 添加事件
        /// </summary>
        /// <param name="model">實(shí)體類(lèi)</param>
        /// <param name="fc"></param>
        /// <returns></returns>
        [Authorize, HttpPost, ValidateInput(false)]
        public ActionResult Add(SystemUser model, FormCollection fc)
        {
            model.BusinessPermissionString = fc["MoudelList"];
            model.State = 1;
            model.CreateTime = DateTime.Now;
            systemuserrepository.SaveOrEditModel(model);
            return RedirectToAction("UserList");
        }
        #endregion
        //修改權(quán)限
        [Authorize, AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
        public ActionResult Edit(int id, FormCollection fc)
        {
            var model = systemuserrepository.GetModel(id);
            if (model != null)
            {
                string password = model.PassWord;
                if (Request.Form["PassWord"] != "")
                {
                    model.BusinessPermissionString = fc["MoudleList"];
                    UpdateModel(model);
                    systemuserrepository.SaveOrEditModel(model);
                }
                else
                {
                    model.BusinessPermissionString = fc["MoudleList"];
                    UpdateModel(model);
                    model.PassWord = password;
                    systemuserrepository.SaveOrEditModel(model);
                }
                return RedirectToAction("userlist");
            }
            else
                return View("404");
        }
        #endregion

復(fù)制代碼 代碼如下:

        [Authorize]
        public ActionResult Edit(int id)
        {
            var model = systemuserrepository.GetModel(id);
            if (model != null)
            {
                var moudleList = EnumHelper.GetItemValueList<EnumBusinessPermission>();
                this.ViewBag.MoudleList = new SelectList(moudleList, "Key", "Value", string.Join(",", model.BusinessPermissionString.ToString()));
                return View(model);
            }
            else
                return View("404");
        }

以上就是本文的全部?jī)?nèi)容了,后續(xù)我們將持續(xù)更新,小伙伴們是否喜歡本系列文章呢?

相關(guān)文章

  • sql server中批量插入與更新兩種解決方案分享(asp.net)

    sql server中批量插入與更新兩種解決方案分享(asp.net)

    xml和表值函數(shù)的相對(duì)復(fù)雜些這里簡(jiǎn)單貼一下bcp和SqlDataAdapter進(jìn)行批量跟新插入方法,未經(jīng)整理還望見(jiàn)諒
    2012-05-05
  • ASP.NET?MVC實(shí)現(xiàn)樹(shù)形導(dǎo)航菜單

    ASP.NET?MVC實(shí)現(xiàn)樹(shù)形導(dǎo)航菜單

    這篇文章介紹了ASP.NET?MVC實(shí)現(xiàn)樹(shù)形導(dǎo)航菜單的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • ASP.NET生成樹(shù)形顯示的GridView實(shí)現(xiàn)思路

    ASP.NET生成樹(shù)形顯示的GridView實(shí)現(xiàn)思路

    生成樹(shù)形結(jié)構(gòu)的表格數(shù)據(jù)(EasyUI也有TreeGrid,此處只是提供一個(gè)思路),可以擴(kuò)展單擊展開(kāi)/收縮節(jié)點(diǎn),喜歡的朋友可以了解下啊,或許本文對(duì)你學(xué)習(xí)GridView有所幫助
    2013-02-02
  • asp.net中如何實(shí)現(xiàn)水印

    asp.net中如何實(shí)現(xiàn)水印

    水印的實(shí)現(xiàn)方法有很多,而且各種各樣,在本文將為大家介紹下在asp.net中時(shí)如何實(shí)現(xiàn)的,如果你不會(huì)可以參考下
    2013-09-09
  • ASPX向ASCX傳值以及文本創(chuàng)建圖片(附源碼)

    ASPX向ASCX傳值以及文本創(chuàng)建圖片(附源碼)

    把用戶(hù)在TextBox輸入的文字創(chuàng)建為一個(gè)圖片,ASCX的ImageButton的ImageUrl重新指向這剛產(chǎn)生的圖片,接下來(lái)介紹下ASPX向ASCX傳值,感興趣的朋友可以參考下哈
    2013-03-03
  • 理解ASP.NET Core 啟動(dòng)類(lèi)(Startup)

    理解ASP.NET Core 啟動(dòng)類(lèi)(Startup)

    這篇文章主要介紹了ASP.NET Core 啟動(dòng)類(lèi)(Startup),文中運(yùn)用代碼講解相關(guān)知識(shí)非常詳細(xì),感興趣的小伙伴可以參考一下
    2021-09-09
  • 詳解.NET中string與StringBuilder在字符串拼接功能上的比較

    詳解.NET中string與StringBuilder在字符串拼接功能上的比較

    string與StringBuilder的在字符串拼接時(shí)執(zhí)行效率上有差異,這篇文章主要介紹了詳解.NET中string與StringBuilder在字符串拼接功能上的比較,感興趣的小伙伴們可以參考一下
    2018-11-11
  • asp.net5中的用戶(hù)認(rèn)證與授權(quán)(1)

    asp.net5中的用戶(hù)認(rèn)證與授權(quán)(1)

    Visual Studio 2015 Preview 除了給我們帶了了C# 6.0的新語(yǔ)法、跨移動(dòng)的開(kāi)發(fā)以外,還給我們帶來(lái)了ASP.NET5(也就是之前被稱(chēng)作下一代ASP.NET的ASP.NET vNext)。本文給大家介紹asp.net5中的用戶(hù)認(rèn)證與授權(quán)(1),需要的朋友可以參考下
    2015-10-10
  • ASP.NET?MVC5網(wǎng)站開(kāi)發(fā)顯示文章列表(九)

    ASP.NET?MVC5網(wǎng)站開(kāi)發(fā)顯示文章列表(九)

    顯示文章列表分兩塊,管理員可以顯示全部文章列表,一般用戶(hù)只顯示自己的文章列表。文章列表的顯示采用easyui-datagrid,后臺(tái)需要與之對(duì)應(yīng)的action返回json類(lèi)型數(shù)據(jù),感興趣的小伙伴們可以參考一下
    2015-09-09
  • mvc下,3種窗口彈出設(shè)置的方法

    mvc下,3種窗口彈出設(shè)置的方法

    想做頁(yè)面美化,特別是在一個(gè)頁(yè)面中,只占了很小一塊的頁(yè)面,想做成彈出窗口樣式,稍微總結(jié)了下:
    2013-07-07

最新評(píng)論