【问题标题】:Laravel spatie/laravel-permissionsLaravel spatie/laravel 权限
【发布时间】:2017-03-11 08:58:02
【问题描述】:

我需要 spatie/Laravel 权限方面的帮助。当我尝试分配时,它给了我错误 糟糕,好像出了点问题。

$role = new Role;
$n = count($request['permission_id']);

for($i=0; $i< $n ; $i++)
{
    $role->givePermissionTo('9');
} 

错误:

Connection.php 第 761 行中的 QueryException:SQLSTATE[23000]:完整性 违反约束:1048 列 'role_id' 不能为空(SQL: 插入role_has_permissions (permission_id, role_id) 值 (9, ))

【问题讨论】:

  • 我对 spatie 不熟悉,但您似乎需要先将角色保存到数据库中,然后才能将其分配给某人。
  • 我已经在数据库中保存了一些角色
  • 但是您正在创建一个新角色。 $role = new Role; 与已保存的模型无关。更不用说你的代码没有多大意义。您正在计算您在请求中传递的数字 (X),然后循环将未保存的角色提供给用户 9,X 次。
  • 这是我想做的事情 $role->givePermissionTo('POS' )
  • 您正在尝试为不存在的角色添加权限。要么创建它$role = Role::create(['name' =&gt; 'writer']);,要么从你的数据库中获取它:$role = Role::where('name', 'writer')-&gt;first();。然后你就可以给它权限了

标签: laravel


【解决方案1】:

如果您已经拥有该角色,那么您只需要像这样获得它:

$role = Role::find($id);

或者(如果你想通过名字得到它)

$role = Role::where('name', '=' , $name)->get();

然后分配权限

$role->givePermissionTo('name of the permission');

【讨论】:

    【解决方案2】:

    在 Laravel 中,当您使用 new 创建模型时,它不会插入到数据库中,您应该 save 您的模型或使用 create

    $role = new Role();
    $role->save();  // role now has an id
    

    $role = Role::create();  // new role and has an id
    

    另外,您的循环不正确,您的意思是使用计数器来索引请求中的权限数组吗?目前,它会尝试添加与数组中的项目一样多的相同权限。

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 2021-12-20
      • 1970-01-01
      • 2019-12-20
      • 2019-09-19
      • 1970-01-01
      • 2020-04-25
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多