首页 文章

Laravel 4中具有特定角色的用户的额外字段

提问于
浏览
0

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

例:

  • A类账户:可以访问所有区域

  • B类帐户:只能访问1个区域及其子区域 .

  • C类帐户:只能访问1个子区域 .

因此,会有一个“区域”表和一个“子区域”表,其中包含额外信息 . 对于帐户类型A,我不需要额外的字段 . 对于B,我需要一个'area_id'字段,而对于C a'sub-area_id'字段 . 那些田地会去哪儿?我不认为它会是'用户'表,因为它们不是常见字段 .

如果您需要额外的信息,请告诉我,我会尽力帮助您 .

2 回答

  • 0

    如果你想要干净利落并在将来扩展更多,我会做的是创建另外两个表,一个权限表和一个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');
    
  • 0

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

相关问题