public void ThenWillExecuteInCorrectOrder() { var requireAuthZ = new RequireAuthorizationAttribute(); var requireAuthZRoles = new RequireRolesAttribute(); Assert.True(-requireAuthZ.Priority > -requireAuthZRoles.Priority); }
/// <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(); }
/// <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); }