2017-06-17 41 views
3

我想创建用户,我可以授予权限。 我创建了一个权限模型,其中包含以下属性(ID |名称|显示名|倒序)Laravel使Acl用户具有权限(无级别/组)

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 并与splited权限存储权限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

你可以在你的模型中发布代码吗? (用户模型和权限模型?)而没有看到,我看不到你使用的是什么类型的关系,尽管看起来你使用的是一对多的关系。

无论哪种方式...

也可以让用户在分配他们的权限,而不用担心组的方法是使用一个多到多的关系。这需要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迁移(字段名称并不重要,ju ST请确保您有增量()之一)

$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-> permissions访问一个权限数组,并执行你需要检查的任何逻辑检查是否允许它们做任何事情!

相关问题