2

私はASP.NET Boilerplateで構築されたプロジェクトに取り組んでいます。私が使用するテンプレートは、Module Zeroを含む.NET Core with Angularです。マルチテナントが有効になっています。テナントユーザーをホストから特定のロールでリストする方法は?

現在作業中のタスクは、ホストの管理者が各テナントからAdminロールを持つユーザーを表示できるようにすることです。テナントリストのポップアップメニュー(Actions列)に新しいメニュー項目を追加しました。 APIメソッドを呼び出し、tenantIdを渡します。

APIコードは、この(以下の定型コードパターン)のようになります。アプリケーションで

if (tenantId != null) 
{ 
    UnitOfWorkManager.Current.SetTenantId(tenantId.Value); 

    adminRole = await _roleManager.GetRoleByNameAsync("admin"); 
} 

if (tenantId != null && adminRole != null) 
{ 
    users = users.Where(u => u.Roles.Any(r => r.RoleId == adminRole.Id)); 
} 

var totalCount = await AsyncQueryableExecuter.CountAsync(users); 

users = ApplySorting(users, input); 

users = ApplyPaging(users, input); 

、私はテナントが混在しています。あるものは独自のデータベースを持ち、あるものはそうしないものもあります。上のコードは、テナントが独自のデータベースを持っていてテナントがいないときにエラーメッセージが表示されます。

必要な権限が与えられていません。これらの権限の少なくとも一方が付与されている必要があり:ログ・ファイルで、ユーザー

は、私は次の例外があります。ここ

 
WARN 2017-11-23 10:37:23,101 [45] Mvc.ExceptionHandling.AbpExceptionFilter - Required permissions are not granted. At least one of these permissions must be granted: Users 
Abp.Authorization.AbpAuthorizationException: Required permissions are not granted. At least one of these permissions must be granted: Users 
at Abp.Authorization.PermissionCheckerExtensions.d__9.MoveNext() in D:\Github\aspnetboilerplate\src\Abp\Authorization\PermissionCheckerExtensions.cs:line 195 
--- End of stack trace from previous location where exception was thrown ---at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Abp.Authorization.AuthorizationHelper.d__19.MoveNext() in D:\Github\aspnetboilerplate\src\Abp\Authorization\AuthorizationHelper.cs:line 48 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Abp.Authorization.AuthorizationHelper.d__22.MoveNext() in D:\Github\aspnetboilerplate\src\Abp\Authorization\AuthorizationHelper.cs:line 98 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Abp.Authorization.AuthorizationHelper.d__20.MoveNext() in D:\Github\aspnetboilerplate\src\Abp\Authorization\AuthorizationHelper.cs:line 57 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task task) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot) 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException(Task task) 
at Nito.AsyncEx.AsyncContext.Run(Func'1 action) at Abp.Authorization.AuthorizationInterceptor.Intercept(IInvocation invocation) 
in D:\Github\aspnetboilerplate\src\Abp\Authorization\AuthorizationInterceptor.cs:line 20 
at Castle.DynamicProxy.AbstractInvocation.Proceed() 
at Abp.Domain.Uow.UnitOfWorkInterceptor.PerformSyncUow(IInvocation invocation, UnitOfWorkOptions options) in D:\Github\aspnetboilerplate\src\Abp\Domain\Uow\UnitOfWorkInterceptor.cs:line 68 
at Castle.DynamicProxy.AbstractInvocation.Proceed() 
at Castle.DynamicProxy.AbstractInvocation.Proceed() 
at Castle.DynamicProxy.AbstractInvocation.Proceed() 
at Castle.Proxies.UserAppServiceProxy.ApplySorting(IQueryable'1 query, PagedResultRequestDto input) 
at CK.Users.UserAppService.d__16.MoveNext() in D:\Projects\CK\Development\aspnet-core\src\CK.Application\Users\UserAppService.cs:line 179 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at lambda_method(Closure , Object) 
at Microsoft.Extensions.Internal.ObjectMethodExecutorAwaitable.Awaiter.GetResult() 
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__10.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) 
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__14.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__23.MoveNext() 

質問は、彼らが持っているテナントと同じコード作業を行う理由は、あります他の人とは例外がありますか?そして、私は何をする必要があるので、テナントの設定に関係なく、このコードを稼働させることができます。

すべての提案が歓迎されます。

よろしく、 アレックス

+0

あなたは安全に[AbpAllowAnonymous]属性を持つそのメソッドをオーバーライドすることができます。どうも。これを回答として投稿できますか?それを受け入れることができますか?違いは[AbpAllowAnonymous]属性を置かなければならない点だけです。 – Alex

答えて

2

AuthorizationInterceptorが不必要にApplySortingメソッドをインターセプトすることが表示されます。それは作品

[AbpAllowAnonymous] 
protected override IQueryable<User> ApplySorting(IQueryable<User> query, UserGetAllInput input) 
{ 
    return base.ApplySorting(query, input); 
} 
関連する問題