Пример #1
0
            public void ThenWillExecuteInCorrectOrder()
            {
                var requireAuthZ      = new RequireAuthorizationAttribute();
                var requireAuthZRoles = new RequireRolesAttribute();

                Assert.True(-requireAuthZ.Priority > -requireAuthZRoles.Priority);
            }
Пример #2
0
        /// <summary>
        /// 初始化权限
        /// </summary>
        /// <param name="assemblyPath">程序集路径</param>
        /// <param name="infoSystemNo">信息系统编号</param>
        /// <param name="applicationType">应用程序类型</param>
        private async Task InitAuthorities(string assemblyPath, string infoSystemNo, ApplicationType applicationType)
        {
            //加载程序集、加载权限
            Assembly assembly = Assembly.LoadFrom(assemblyPath);

            Type[] types = assembly.GetTypes();

            //加载需认证的方法
            IEnumerable <MethodInfo> methodInfos = types.SelectMany(x => x.GetMethods()).Where(x => x.IsDefined(typeof(RequireAuthorizationAttribute), false));

            //构造权限参数模型集
            IList <AuthorityParam> authorityParams = new List <AuthorityParam>();

            foreach (MethodInfo methodInfo in methodInfos)
            {
                object[] attributes = methodInfo.GetCustomAttributes(typeof(RequireAuthorizationAttribute), false);
                RequireAuthorizationAttribute attribute = (RequireAuthorizationAttribute)(attributes[0]);
                AuthorityParam authorityParam           = new AuthorityParam
                {
                    authorityName = attribute.AuthorityPath,
                    authorityPath = attribute.AuthorityPath
                };
                authorityParams.Add(authorityParam);
            }

            await Task.Factory.StartNew(() => this._authorizationContract.CreateAuthorities(infoSystemNo, applicationType, authorityParams));
        }
        /// <summary>
        /// 拦截方法
        /// </summary>
        /// <param name="context">方法元数据</param>
        public void Advise(MethodAdviceContext context)
        {
            object[] attributes = context.TargetMethod.GetCustomAttributes(typeof(RequireAuthorizationAttribute), false);
            RequireAuthorizationAttribute attribute = attributes.Any() ? (RequireAuthorizationAttribute)attributes[0] : null;

            if (GlobalSetting.AuthorizationEnabled && attribute != null)
            {
                LoginInfo loginInfo = MembershipMediator.GetLoginInfo();
                if (loginInfo == null)
                {
                    throw new NoPermissionException("当前登录信息为空,请重新登录!");
                }

                IEnumerable <string> ownedAuthorityPaths = loginInfo.LoginAuthorityInfos.Select(x => x.Path);
                if (!ownedAuthorityPaths.Contains(attribute.AuthorityPath))
                {
                    throw new NoPermissionException("您没有权限,请联系系统管理员!");
                }
            }

            context.Proceed();
        }
Пример #4
0
        /// <summary>
        /// 初始化权限集
        /// </summary>
        /// <param name="assemblyPath">程序集路径</param>
        /// <param name="systemKindNo">信息系统类别编号</param>
        private void InitAuthorities(string assemblyPath, string systemKindNo)
        {
            //加载程序集、加载权限
            Assembly assembly = Assembly.LoadFrom(assemblyPath);

            Type[] types = assembly.GetTypes();

            //加载需认证的方法
            IEnumerable <MethodInfo> methodInfos = types.SelectMany(x => x.GetMethods()).Where(x => x.IsDefined(typeof(RequireAuthorizationAttribute)));

            //构造权限参数模型集
            IList <AuthorityParam> authorityParams = new List <AuthorityParam>();

            foreach (MethodInfo methodInfo in methodInfos)
            {
                RequireAuthorizationAttribute attribute = methodInfo.GetCustomAttribute <RequireAuthorizationAttribute>();

                AuthorityParam authorityParam = new AuthorityParam
                {
                    AssemblyName  = assembly.GetName().Name,
                    Namespace     = methodInfo.DeclaringType.Namespace,
                    ClassName     = methodInfo.DeclaringType.Name,
                    MethodName    = methodInfo.Name,
                    AuthorityName = attribute.AuthorityName,
                    EnglishName   = attribute.EnglishName,
                    Description   = attribute.Description
                };

                if (!this._authorizationContract.ExistsAuthority(authorityParam.AssemblyName, authorityParam.Namespace, authorityParam.ClassName, authorityParam.MethodName))
                {
                    authorityParams.Add(authorityParam);
                }
            }

            this._authorizationContract.CreateAuthorities(systemKindNo, authorityParams);
        }