• Action权限验证


    1 Action添加特性

       [PermissionFilterForJson(Name = "AdvertiserId", ActionName = EaActionNames.广告主相关_广告主上线,Type = (int) EaEnum.LoginType.Advertiser)]
            public JsonResult AdvertiserEffect(ExEaAdvertiserModel model)
            {
                MessageInfo msg = _eaAdvertiserAuditBussiness.Online(base.AccountId, model.AdvertiserId, model.IsHidden,
                                                                     model.IsUpdateOnLineTime);
                return Json(msg, JsonRequestBehavior.AllowGet);
            }

    2 操作项权限验证,返回Json

      public class PermissionFilterForJsonAttribute : PermissionFilterForAttribute
        {
            private readonly IPermissionManagementBussiness _pms = ObjectFactory.GetInstance<IPermissionManagementBussiness>();
    
            public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
            {
                bool premission = false;
                MessageInfo msg = new MessageInfo {Status = MessageStatus.Error, Message = "您没有此项功能的操作权限", Title = "pms"};
    
                try
                {
                    int id = 0;
                    if (filterContext.ActionParameters.ContainsKey(this.Name))
                    {
                        id = filterContext.ActionParameters[this.Name].TryInt();
                    }
                    else
                    {
                        var prop = filterContext.ActionParameters.First().Value.GetType().GetProperty(this.Name);
                        if (prop != null)
                        {
                            var v = prop.GetValue(filterContext.ActionParameters.First().Value, null);
                            if (v != null)
                            {
                                id = Convert.ToInt32(v);
                            }
                        }
                    }
                    switch (this.Type)
                    {
                        case (int) EaEnum.LoginType.Advertiser:
                            premission = _pms.AdvertiserCheckPermission(id, this.AccountId, this.ActionName);
                            break;
                        case (int) EaEnum.LoginType.Media:
                            premission = _pms.MediaCheckPermission(id, this.AccountId, this.ActionName);
                            break;
                    }
                }
                catch (Exception e)
                {
                    msg.Message = e.Message;
                }
    
                if (!premission)
                {
                    filterContext.Result = new JsonResult
                        {
                            Data = msg,
                            ContentType = "text/json",
                            JsonRequestBehavior = JsonRequestBehavior.AllowGet
                        };
                }
            }
    
        }


    3 面包屑权限验证,返回View

        public class PermissionFilterForViewAttribute : PermissionFilterForAttribute
        {
            private readonly IPermissionManagementBussiness _pms = ObjectFactory.GetInstance<IPermissionManagementBussiness>();
    
            public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
            {
                bool premission = _pms.CheckPms(this.AccountId, this.ActionName);
    
                if (!premission)
                {
                    filterContext.Result = new RedirectResult("/AccountLogin/NoURL");
                }
            }
    
        }

    4 特性参数

        public class PermissionFilterForAttribute : ActionFilterAttribute
        {
    
            /// <summary>
            /// 类型【广告主/媒体主】
            /// </summary>
            public int Type { get; set; }
    
            /// <summary>
            /// 动作名称
            /// </summary>
            public string ActionName { get; set; }
    
            /// <summary>
            /// 是否只校验CMS权限,不校验资源权限
            /// </summary>
            public bool IsCheckCmsOnly { get; set; }
    
            /// <summary>                   
            /// 当前登录用户ID
            /// </summary>
            public int AccountId
            {
                get
                {
                    if (HttpContext.Current.User != null && HttpContext.Current.User.Identity.IsAuthenticated)
                        return ((EAIdentity)HttpContext.Current.User.Identity).AccountId;
                    else
                        return 0;
                }
            }
    
            /// <summary>
            /// 匹配不统一的广告主/媒体主命名
            /// </summary>
            private string _name;
    
            public string Name
            {
                get
                {
                    if (string.IsNullOrEmpty(_name))
                    {
                        _name = this.Type == (int) EaEnum.LoginType.Advertiser ? "advertiserId" : "mediaId";
                    }
    
                    return _name;
    
                }
                set { _name = value; }
            }
    
        }
  • 相关阅读:
    nmap加快扫描速度(转载)
    deepin换源
    利用74HC595实现的流水灯 Arduino
    解决用vscode开发arduino时Serial未定义
    JS获取格式为YYYY-MM-DD的当前日期
    链式前向星存图
    Nginx+FFmpeg实现RTSP转RTMP
    非root用户安装centos的jdk
    Nginx配置请求头
    Eclipse-Che 安装(Centos)
  • 原文地址:https://www.cnblogs.com/Mylimo/p/3725864.html
Copyright © 2020-2023  润新知