public static void AddScopePolicies <TController>( this AuthorizationOptions options, string issuer, Assembly assembly = null, bool fromReferenced = false) { foreach (var attr in ScopeAuthorizeHelper .GetAllScopeAuthorizeAttributes <TController>( assembly, fromReferenced)) { options.AddScopePolicy(attr.Scope, issuer); } }
GetAllScopeAuthorizeAttributes <TController>( Assembly assembly = null, bool fromReferenced = false) { var ass = assembly ?? Assembly.GetEntryAssembly(); var ttype = typeof(TController); foreach (var typeInfo in ass.DefinedTypes) { if (!(typeInfo.IsSubclassOf(ttype) || typeInfo.IsInstanceOfType(ttype))) { continue; } foreach (var methodInfo in typeInfo.GetMethods()) { foreach (var attribute in methodInfo .GetCustomAttributes <ScopeAuthorizeAttribute>(true)) { yield return(attribute); } } } if (fromReferenced) { foreach (var items in ass.GetReferencedAssemblies() .Select(s => ScopeAuthorizeHelper .GetAllScopeAuthorizeAttributes <TController>( Assembly.Load(s)))) { foreach (var item in items) { yield return(item); } } } }