【问题标题】:Extra fields for users with specific roles in Laravel 4Laravel 4 中具有特定角色的用户的额外字段
【发布时间】:2015-01-28 16:40:23
【问题描述】:

我正在使用 MySQL 数据库在 Laravel 4.2 中开发应用程序。我有 'users'、'roles_users' 和 'roles' 表,其中 'role_user' 是数据透视表,因为它是多对多关系。现在,在我的应用程序中会有不同类型的帐户。某些类型需要有一个独特的额外字段。该字段是外键字段,将帐户类型链接到特定表。

例子:

  • A 类帐户:可以访问所有区域
  • B 类帐户:只能访问 1 个区域及其子区域。
  • C 类帐户:只能访问 1 个子区域。

因此,将有一个“区域”表和一个“子区域”表,其中包含额外的信息。对于帐户类型 A,我不需要额外的字段。对于 B,我需要一个“area_id”字段,对于 C,我需要一个“sub-area_id”字段。这些领域会去哪里?我认为这不会是“用户”表,因为它们不是常用字段。

如果您需要更多信息,请告诉我,我会尽力提供帮助。

【问题讨论】:

    标签: php mysql database laravel laravel-4


    【解决方案1】:

    如果你想干净利落地在未来扩展更多,我会做的是再创建 2 个表,一个权限表和一个 permission_role 多对多表。

    for permissions table:
    $table->increments('id');
    $table->integer('area_id')->unsigned();
    $table->integer('subarea_id')->unsigned();
    
    for permission_role table:
    $table->increments('id');
    $table->integer('permission_id')->unsigned();
    $table->integer('role_id')->unsigned();
    

    因此,您将为每个角色分配多个权限。并且会有 3 个角色(例如 account_a、account_b、account_c)。一个弱点是,如果您在一个区域中添加一个新的子区域,例如account_a 不会自动访问它。这会有点复杂,但是如果您想在 account_a 可以访问区域 x 及其所有子区域(例如 x1、x.2、x.3)并且有一个新的子区域 x.4 时实现自动化,您可以account_a 自动获得访问权限,您可以这样做(多态多对多):

    for permissions table:
    $table->increments('id');
    $table->string('area_type'); // i.e. either "Area" or "Subarea"
    $table->integer('area_access_id')->unsigned(); // this can be an ID to an "Area" or to a "Subarea"
    
    for permission_role table:
    $table->increments('id');
    $table->integer('permission_id')->unsigned();
    $table->integer('role_id')->unsigned();
    
    for area table:
    $table->increments('id');
    $table->string('name');
    
    for sub_area table:
    $table->increments('id');
    $table->integer('parent_area_id')->unsigned();  // references area.id
    $table->string('name');
    

    【讨论】:

      【解决方案2】:

      取决于您如何存储这些“区域”,如果您可以引用它们,那么就这样做。链接/存储此数据的逻辑位置在“角色”表中,这是有关您的角色和权限的所有信息应该驻留的地方。本质上,您也希望能够通过一次更新来更改它,因此将其添加到“角色”将做到这一点,因为每种权限类型都有一行,这是用户获得权限的地方.

      【讨论】:

        猜你喜欢
        • 2017-09-10
        • 2019-08-13
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-02
        • 2014-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多