gpt4 book ai didi

php - Laravel 使 Acl 用户具有权限(无等级/组)

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:28 24 4
gpt4 key购买 nike

我想创建我可以授予权限的用户。我创建了一个权限模型,其中包含以下属性 (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 with fields

id|user_id|perms|id

但是什么选项是最好的呢?

最佳答案

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

无论哪种方式...

让用户分配权限而不用担心组的方法是使用多对多关系。这需要 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 迁移(字段名并不重要,只要确保有 increments() 即可)

$table->increments('id');
$table->string('name');
(etc, standard migration stuff)

create_permissions_table 迁移(字段名并不重要,只要确保有 increments() 即可)

$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 访问一组权限,并执行您需要的任何逻辑检查以检查它们是否被允许执行操作!

关于php - Laravel 使 Acl 用户具有权限(无等级/组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com