【问题标题】:How Do I Determine if a Child or GrandChild Class Needs a TenantId?如何确定子类或 GrandChild 类是否需要 TenantId?
【发布时间】:2018-12-23 02:24:59
【问题描述】:

假设您有一个租户,该租户有许多用户,这些用户有许多帐户,有许多交易。

您将 TenantId 属性添加到树的多远?
您添加 UserId 的树有多远?
还是您只需要拥有父 ID?

假设用户在没有首先访问其父实体的情况下永远不会有意访问子实体。在一个蛞蝓中,它会是这样的: baseurl.com/accounts/{accountId/transactions/{transactionId}

public class Tenant
{
    public long Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<User> Users { get; set; }
    public virtual ICollection<Account> Accounts { get; set; }
    public virtual ICollection<Transaction> Transactions { get; set; }
}

public class User
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Account> Accounts { get; set; }
}

public class Account
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string UserId { get; set; }
    public virtual ICollection<Transaction> Transactions { get; set; }
}

public class Transaction
{
    public long Id { get; set; }
    public long TenantId { get; set; }
    public string UserId { get; set; }
    public string AccountId { get; set; }
}

我倾向于看到在属于租户的所有内容上使用 TenantId 的示例。我想这是为了安全,但我的自然假设是 UserId 就足够了。例如,即使 Transaction 比 User 低两个级别,我认为我不应该允许任何知道 Transaction ID 的人访问交易而不是拥有该帐户的用户。

【问题讨论】:

    标签: c# .net multi-tenant hierarchical-data


    【解决方案1】:

    我们添加 TenantId 所遵循的规范适用于所有主要实体。例如,Users 和 Accounts 应该有 TenantId。由于交易是用户和帐户的依赖实体,因此如果不参考基础(帐户/用户)就无法获取它,因此没有授权 对于 TenantId。

    经验法则是按租户对要分组/分类的主要业务实体进行分类。 (用户、帐户等),以便在数据库中检索或更新数据时,在对映射或子表执行任何操作之前进行适当的租户过滤。因此,根据领域对象,请明智地包含 TenantId 列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      • 2014-04-23
      • 1970-01-01
      • 2021-05-25
      • 2016-08-10
      相关资源
      最近更新 更多