当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.1前端acl角色和权限

翟功
2023-03-14

以下是权限、角色和permission\u角色的表结构

权限:

id名称

id名称

permission\u角色:

role\u id,permission\u id

这里permission_role是我的数据透视表。

在我的前端,我设置了这样的东西,

welcome.blade.php

  <form method="POST" action="/give/permission">
    {!! csrf_field() !!}

      <select name="role" class="selectpicker" multiple data-max-options="2">
      @foreach($roles as $r)
      <option value="{{$r->id}}">{{$r->name}}</option>
      @endforeach
</select>
<div class="checkbox">
@foreach ($perm as $p)
    {!! Form::checkbox('p[]', $p->id, in_array($p->id, $all_data)) !!}
    {!! Form::label('permisssion', $p->name) !!}<br>
@endforeach
    </div>
    <button type="submit" class="default">Submit</button>
    </form>

在我的控制器中。php

public function postrolperm(Request $request,$id){
    $p = Role::find($id);
    $role = $request->role;
    //dd($input1);
    $permission = $request->p;
  //dd($input2);
  //
  //$role = Role::where("name", "admin")->get();

  if(isset($permission) && isset($role)){
    $role->givePermissionTo($permission);
    $role->save();
  }
  return redirect::back();
 }

角色php

public function givePermissionTo(Permission $permission)
    {
        return $this->permissions()->save($permission);
    }

我无法将数据保存到数据透视表中。

我在php artisan tinker中尝试了以下命令:

 $role = Role::first(); //which gives me the first role with id of 1

    $role->givePermissionTo(Permission::first()); // it will save the first permission to the role.

我的控制器做错了什么?

还要注意的是,这条路线工作正常。

Route::get("/pivot", function(){
    $permission = new Permission;
    $permission->name = "can to";
    $permission->save();
    $role = new Role;
    $role->name = "admin2";
    $role->save();
    $role->givePermissionTo($permission);
    return "true";

});

共有2个答案

狄旻
2023-03-14

你加了吗

use App\Role;

在controller.php档案里?

曾沛
2023-03-14

它不起作用的原因是,您没有根据从视图返回的id创建角色和权限对象。下面给出了一个工作示例:

$role_id = $request->role;
$permission_ids = $request->p; // This comes back as an array.
if(isset($permission_ids) && isset($role_id)){
    $role_object = Role::where('id', $role_id)->firstOrFail();
    foreach ($permission_ids as $permission_id) {
        // loop through each permission id
        // find the corresponding permission object in the database
        $permission_object = Permission::where('id', $permission_id)->firstOrFail();

        // assign the object to the role
        $role_object->givePermissionTo($permission_object);
    }
    $role_object->save();
}
return Redirect::back()

请注意,如果从视图传回的角色和权限与数据库中的有效id不对应,则会引发异常。如果希望故障保持静默,即不引发异常,请使用first()而不是firstOrFail()

确保添加使用应用程序\角色和使用App\权限到控制器文件的顶部。

您的版本失败,因为您试图对表示从视图传递的角色id的字符串调用givePermissionTo函数-$角色。您错过了从数据库获取角色对象的中间步骤。

奇怪的是,您使用的$p变量是正确的,但是您还需要从数据库中获取相应的$permission对象,如我的示例所示。

 类似资料:
  • 我不是Spring4的新手,但我是SpringSecurity4ACL的新手。我刚刚在我的MVC Web应用程序上实现了Spring Security4,这些应用程序都是后端Web服务。这里贴出了我所做的事情的链接: 这为我的URL增加了安全性,只有具有特定角色的用户才能请求URL。这太棒了!我们以SiteMinder为例,不是传回一个用户名,而是在请求头中传回一个令牌。我们调用OpenAM,传入

  • 我有一个springmvc和springsecurity项目。 角色: 权限: 以及在角色和权限之间: 接下来的情况是: 我有一个控制器,我想用注释保护操作 大概是这样的: 但是注释不起作用,但是如果我把代码改成这样就可以了: 有人能给我一个提示吗?我不想用权限限制操作,我更喜欢角色限制。 提前谢谢。

  • 角色是分配给用户的权限集合。默认情况下,Navicat Monitor 包含三个预定义的角色供你分配给不同用户以限制其访问权限。它还允许你创建具自定义权限设置的新角色。苃要配置角色及其权限,请前往“配置”->“角色和权限”。 每个预定义的角色都有不同的权限: 角色 权限 管理员 可以完全控制访问所有页面。此角色的权限是不可编辑的。 DBA 可以访问所有页面,但以下功能“除外”: - 激活令牌密钥,

  • 下午好.如何在不使用不同的OAUTH2服务的情况下,为一个应用程序中的特定实体(类似于RBAC/ABAC)的特定控制器配置用户的权限和角色? 还有一个名为Project的实体。用户可能是许多项目的成员。有一些项目用户角色:PROJECT_ADMIN、PROJECT_EDITO、PROJECT_USER。每个项目角色都可以拥有自己的权限(权限),如向项目添加用户、编辑项目等。所有角色配置都存储在'P

  • 所以,请提前指导我如何在spring mvc中实现这个任务谢谢。

  • 问题内容: 我正在尝试设置具有权限的基于角色的安全性。我正在尝试与Spring-Security一起执行此操作。 我不想设置ACL,因为这似乎对我的要求来说有些过头了。 我只想拥有本文所述的简单权限和角色。不幸的是,本文没有描述如何实现给定的解决方案。 有人已经尝试过了,可以指出正确的方向吗?也许还有另一个博客条目描述了实现方式? 非常感谢你。 问题答案: 要实现这一点,您似乎必须: 创建模型(用