如何共享由主机管理但租户可以访问的实体?

时间:2018-06-08 09:04:20

标签: asp.net-core aspnetboilerplate

使用aspnetboilerplate v3.6

应用程序具有仅由主机管理(CRUD)的实体Book。但是,租户应具有对此实体的只读访问权限。

例如,租户用户应该能够看到可用的书籍列表。目标是让租户用户选择他们喜欢的书籍列表,但这些书籍只能由主持人创建。

2 个答案:

答案 0 :(得分:1)

public class Book: Entity, IMayHaveTenant
{
    public int? TenantId { get; set; }

    public string BookName { get; set; }
}

IMayHaveTenant接口定义了TenantId,但它可以为空。 空值表示这是一个主机实体,非空值表示该实体由租户拥有,其中Id是TenantId。 ASP.NET Boilerplate默认使用IAbpSession获取当前的TenantId。 IMayHaveTenant过滤器不像IMustHaveTenant那样常见,但您可能需要它来用于主机和租户使用的常见权利类型。

如果您想从租户页面获取所有图书。

using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant))
{
    var allBooks = _bookRepository.GetAllList();                
}

或者您可以抛出IMayHaveTenant并尝试

public class Book: Entity
{
    public string BookName { get; set; }
}

答案 1 :(得分:0)

要添加到Alpers的答案中......

如果您使用[RequiresFeature] AppService属性在功能背后具有特定实体。如果要在宿主站点中管理该实体,请确保已将主模块配置为IgnoreFeatureCheckForHostUsers。 ;)

Configuration.MultiTenancy.IgnoreFeatureCheckForHostUsers = true;

Source: Ignore the RequiresFeature for host user

这咬了我一个...