ASP.NET.4.5.1+MVC5.0設置系統角色與權限(2)_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:使用ASP.NET.4.5.1+MVC5.0 搭建一個包含 Ninject框架 項目
      這篇文章主要介紹了使用ASP.NET.4.5.1+MVC5.0 搭建一個包含 Ninject框架 項目的方法,需要的朋友可以參考下 1.創建一個空白解決方案 2.添加一個類庫 名稱為XXX.Domain 3.添加一個ASP.MVC 名稱為XXX.WebUI 4.選著空模版,勾選MVC核心引用 5.添加單元測試項目 XXX.UntiTes

       

      代碼如下:
      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.在項目中新建RoleControllerBase.cs

       

      代碼如下:
      namespace HR
      {
      public class RoleControllerBase : ControllerBase
      {
      SystemUserRepository sysuserrepository = new SystemUserRepository();
      /// <summary>
      /// 用戶權限
      /// </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方法執行前沒有權限提示信息
      /// </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("您沒有登錄!");
      }
      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("您沒有權限!", "/default/ng");
      else
      filterContext.Result = Content("您沒有權限!");
      }
      }
      }
      }
      }
      }

       

      6.在每個Controller繼承RoleControllerBase類

      public class EmployeesController : RoleControllerBase

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

      分享:ASP.NET中的URL映射技巧
      在項目中經常要進行如下映射 將 http://yyjcw.com/a.aspx?name=llinzzi 映射到 http://yyjcw.com/llinzzi 首先要解決2個問題 第一是支持通配符的映射 URL映射是asp.net2.0新增的功能,不支持通配符 于是采用了NBEAR的 NBear.Web.Modules.UrlRewriteRules 進行通配符映射

      來源:模板無憂//所屬分類:.Net教程/更新時間:2015-01-31
      相關.Net教程