如何禁用超级管理员(主机)的MayhaveTenant过滤器?



我有一个表单,其中的数据列表将显示。该实体包含IMayhaveTenant属性。

现在,当我们通过admin用户(Host)创建记录时,我们首先创建租户,然后将租户Id分配到同一个实体中。

之后,当我们获得记录列表时,这些记录具有租户id,而不是显示在列表中。但是当使用租户用户登录时,它显示在租户登录下。

现在,如果我们想获得主机用户的所有列表,那么我们禁用IMayhaveTenant过滤器,那么这工作得很好。但是每次当我们访问实体时,我们都需要禁用IMayhaveTenant过滤器。

现在我们的要求是,当我们通过主机用户登录时,IMayhaveTenant过滤器将被设置为默认禁用,当使用租户用户登录时,它将按原样工作。

你可以为AppService创建一个基类,然后从这个类派生你的应用服务。

在基类的构造函数中,您可以检查当前登录的用户是否为具有admin角色的主机用户,然后禁用IMayhaveTenant过滤器。

/// <summary>
/// Derive your application services from this class.
/// </summary>
public abstract class AppNameAppServiceBase : ApplicationService
{
public TenantManager TenantManager { get; set; }
public UserManager UserManager { get; set; }
protected AppNameAppServiceBase()
{
if (!AbpSession.TenantId.HasValue &&
UserManager.IsInRoleAsync(UserManager.GetUserById(AbpSession.GetUserId()),
StaticRoleNames.Host.Admin).GetAwaiter().GetResult())
{
CurrentUnitOfWork.DisableFilter(AbpDataFilters.MayHaveTenant);
}
}
}

最新更新