我想创建可以授予权限的用户。 我创建了一个权限模型,其中包含以下属性(id | name | displayName | desc)
1|xyz.edit|Edit xyz| Allow to edit xyz
2|xyz.create|Create xyz| Allow to create xyz
因此,我想创建如下关系:
public function getPermissions(){
return $this->hasMany('App\Permission');
}
但它不起作用。有没有办法创造像这样的关系
用户有很多权限,但没有为用户创建相同的权限?
我可以创建像id|pass|login|...|permissions
这样的用户模型
并且在权限存储权限id中分配了","并在getPermissions()
函数中创建如下内容:
public function getPerms(){
foreach (explode($this->permssions,',')as $id ){
//here load from database perm by id add to array and return
}
}
或者,我在本教程https://www.youtube.com/watch?v=Kas2w2DBuFg中看到的第二个选项是创建另一个包含字段的user_perms
表
id|user_id|perms|id
但是最好的选择是什么?
答案 0 :(得分:0)
您可以在两个模型中发布代码吗? (用户模型和权限模型?)没有看到,我无法看到您正在使用的关系类型,尽管看起来您使用的是一对多。
无论哪种方式......
您可以让用户为其分配权限,而无需担心群组是通过使用多对多关系。这需要3张桌子。用户表,权限表和数据透视表。
您可以在此处阅读有关多对多关系的信息:https://laravel.com/docs/5.5/eloquent-relationships#many-to-many
但要给你一个纲要......
用户模型
public function permissions(){
return $this->belongsToMany('App\Permission');
}
许可模式
public function users(){
return $this->belongsToMany('App\User');
}
create_users_table迁移(字段名称并不重要,只要确保你有增量()一个)
$table->increments('id');
$table->string('name');
(etc, standard migration stuff)
create_permissions_table迁移(字段名称并不重要,只要确保你有增量()一个)
$table->increments('id');
$table->string('name');
$table->string('long_name');
(etc, standard migration stuff)
对于数据透视表,您需要按字母顺序使用两个表的单数名称(或者至少是默认值)
create_permission_user_table(这两个字段名称很重要,laravel期望这些名称,您不需要任何其他字段......如果您想要彻底,也可以设置外键关系)
$table->integer('permission_id');
$table->integer('user_id');
然后给用户一个权限,你就可以了
// Grab your user and permission, however you do that...
$permission = \App\Permission::first();
$user = \App\User::first();
// Then save the permission to the user (or the other way around, but it makes more sense this way)
$user->permissions()->save($permission);
这将让您拥有具有权限的用户:)
然后您可以使用$ user->权限访问一系列权限,并执行您需要进行的任何逻辑检查,以检查是否允许他们执行操作!