zoukankan      html  css  js  c++  java
  • ASP.NET Identity “角色-权限”管理 7

    1.       验证管理

    参考:认识ASP.NET MVC的5种AuthorizationFilter

    ASP.NET MVC框架中已经提供了基于AOP验证的机制与基本部件,重点是FilterAttribute。

    1.1.       新建验证Attribute

    基本思路:父类验证逻辑通过,再验证当前用户所属角色是否具备访问权限。MVC已经有了一个权限验证实现AuthorizeAttribute,这里只需要继承该类,重写相应方法,增加自定义验证逻辑即可。

    注意:属性Roles和Users中的特定角色与用户将不验证访问权限。

    public class IdentityAuthorizeAttribute : AuthorizeAttribute

    {

        /// <summary>

        /// 授权上下文

        /// </summary>

        private AuthorizationContext _filterContext;

     

        #region 重写父类方法

        /// <summary>

        /// 重写授权验证方法

        /// </summary>

        /// <param name="filterContext"></param>

        public override void OnAuthorization(AuthorizationContext filterContext)

        {

            _filterContext = filterContext;

            base.OnAuthorization(filterContext);

        }

        /// <summary>

        /// 重写核心验证方法

        /// </summary>

        /// <param name="httpContext"></param>

        /// <returns></returns>

        protected override bool AuthorizeCore(HttpContextBase httpContext)

        {

            //取父类的验证结果

            var result = base.AuthorizeCore(httpContext);

            //如果验证未通过,则调用访问验证逻辑

            if (!result)

            {

                return HasPermission(_filterContext);

            }

            return result;

        }

        #endregion

    通过ActionDescriptor取请求信息,验证登录用户是否具备权限。

    /// <summary>

    /// 当前请求是否具有访问权限

    /// </summary>

    /// <param name="filterContext"></param>

    /// <returns></returns>

    private bool HasPermission(AuthorizationContext filterContext)

    {

        //取当前用户的权限           

        var rolePermissions = GetUserPermissions(filterContext.HttpContext);

        //待访问的Action的Permission

        var action = new ApplicationPermission

        {

            Action = filterContext.ActionDescriptor.ActionName,

            Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,

            Description = ActionPermissionService.GetDescription(filterContext.ActionDescriptor)       

        };

        //是否授权

        return rolePermissions.Contains(action, new ApplicationPermissionEqualityComparer());

    }

       

    1.2.       应用验证特性

    将该特性添加到Controller或Action上即可实现权限验证,为方便起见将IdentityAuthorize特性添加到BaseController,相应的Controller继承该类。例中“管理员”角色将不验证权限。

    [IdentityAuthorize(Roles="管理员")]

    public abstract class BaseController : Controller

  • 相关阅读:
    新版ubuntu中打开终端的方法和安装ssh 的方法
    HTML中利用404将老域名重定向到新域名
    KeelKit 1.0.3500.25185
    如何制作VSPackage的安装程序
    一副漫画:IE6滚回你老家去
    “表单控件”与“实体类”
    VS2005中得到 Web页面 或 窗体的 IDesignerHost
    一句SQL搞定分页
    CodeDom Assistant CodeDom的强大工具, 有些BUG修正了下,发到CodePlex,大家有需要的可以看看
    VS2005 出现 The OutputPath property is not set for this project. 错误的解决方法
  • 原文地址:https://www.cnblogs.com/mlemon/p/4304591.html
Copyright © 2011-2022 走看看