示例#1
0
        /// <summary>
        /// 判断给定用户能否进行给定的操作
        /// </summary>
        /// <param name="privilageJudge">给定的用户</param>
        /// <param name="privilege">
        ///   为空字符串时表示只要登录就可以访问,
        ///   为null时表示允许匿名访问;
        ///   为字符串时表示权限;
        /// </param>
        /// <returns></returns>
        protected bool AllowAccess(IPrivilegeJudge privilageJudge,
                                   string privilege)
        {
            bool allowAnanymous = false, allowAnyone = false, allowOnlyAdmin = false;

            if (privilege == AuthenUtil.PRIVILEGE_ANYONE)
            {
                allowAnyone = true;
            }
            else if (privilege == AuthenUtil.PRIVILEGE_ANANYMOUS)
            {
                allowAnanymous = true;
            }
            else if (privilege == AuthenUtil.PRIVILEGE_ADMIN)
            {
                allowOnlyAdmin = true;
            }

            if (allowAnanymous)
            {
                return(true);
            }
            if (privilageJudge == null)
            {
                return(false);                         //不允许匿名访问;
            }
            if (allowAnyone && HasSameUsertype(privilageJudge))
            {
                return(true);                                                 //允许同类型的任何人访问;
            }
            if (privilageJudge.IsAdministrator())
            {
                return(true);                                     // 管理员肯定可以访问
            }
            else if (allowOnlyAdmin)
            {
                return(false);                     //需要是管理员,但传入不是管理员;
            }
            if (!HasSameUsertype(privilageJudge))
            {
                return(false);                                  //用户类型不一致,无权限访问
            }
            if (string.IsNullOrEmpty(this.Privilege))
            {
                return(true);                                      //不需要权限; //只需要用户就可以了;
            }
            if (privilageJudge.HasPrivilege(this.Privilege))
            {
                return(true);
            }
            return(false);
        }
示例#2
0
        /// <summary>
        /// 验证用户是否有权限;
        /// 1. 按照如下步骤验证 Action:
        /// 获取 Action 上的方法所定义的如下类型的 Attribute (AbstractAllowAttribute、AuthenQueryAttribute、AuthenModifyAttribute),
        /// 如果未定义任何 Attribute, 跳到第2步;
        /// 1.1 判断当前传入的 权限判断对象 判断能否访问 其中的某一个 Attribute, 如果能够访问,返回授权;
        /// 1.1.1  对于 AbstractAllowAttribute, 调用 AbstractAllowAttribute 的 AllowAccess 方法
        /// 1.1.2  对于 AuthenQueryAttribute , 根据其  InputParameterName 属性从 Request 或者 RouteData 中获取参数类型和参数值,
        /// 并根据参数值 和 传入的 authenTypeParcer实例 解析成类型
        /// 1.1.2.1 如果能够解析到类型,则如果类型上定义有 ClassAllowQuery 标注,则如果 当前权限对象 允许访问 ClassAllowQuery,返回授权;
        /// 1.1.2.2 如果不能解析为类型,但是  参数类型 为 Enum 类型,
        ///         根据参数值解析成 Enum值,并判断此值上是否定义有 ClassAllowQuery标注,判断 当前权限对象  允许访问 ClassAllowQuery,返回授权;
        /// 1.1.2  对于 AuthenModifyAttribute , 根据其  InputParameterName 属性从 Request 或者 RouteData 中获取参数类型和参数值,
        /// 并根据参数值 和 传入的 authenTypeParcer实例 解析成类型
        /// 1.1.2.1 如果能够解析到类型,则如果类型上定义有 ClassAllowModify 标注,则如果 当前权限对象 允许访问 ClassAllowModify,返回授权;
        /// 1.1.2.2 如果不能解析为类型,但是  参数类型 为 Enum 类型,
        ///         根据参数值解析成 Enum值,并判断此值上是否定义有 ClassAllowQuery标注,判断 当前权限对象  允许访问 ClassAllowQuery,返回授权;
        /// 1.2 如果不能访问,返回未授权 或者 未登录
        ///
        /// 2. 按照如上步骤判断 Action 所归属的 Controller,
        /// 获取 Controller 上的方法所定义的如下类型的 Attribute (AbstractAllowAttribute、AuthenQueryAttribute、AuthenModifyAttribute)
        /// </summary>
        /// <returns></returns>
        public EnumAuthenResult Authen(IParceAuthenTypeAccordParameterName authenTypeParcer)
        {
            if (privilegeJudge != null && privilegeJudge.IsAdministrator())
            {
                return(EnumAuthenResult.Authened);
            }
            var authenResult = AuthenAction(authenTypeParcer);

            if (authenResult.HasValue)
            {
                return(ConvertAuthenResult(authenResult.Value));
            }
            authenResult = AuthenConroller(authenTypeParcer);
            if (authenResult.HasValue)
            {
                return(ConvertAuthenResult(authenResult.Value));
            }
            return(ConvertAuthenResult(false));
        }