zoukankan      html  css  js  c++  java
  • 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; }
            }
    
        }
  • 相关阅读:
    vim 多窗口编辑
    opengl笔记——旋转,一段代码的理解
    用条件变量实现事件等待器的正确与错误做法
    opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()
    Mule与其它web应用服务器的区别
    海量数据相似度计算之simhash短文本查找
    关于协方差矩阵的理解
    C++ STL中的常用容器浅谈
    唐-诗:《枫桥夜泊》
    唐-诗:《肚桑干》
  • 原文地址:https://www.cnblogs.com/Mylimo/p/3725864.html
Copyright © 2011-2022 走看看