Php 如何在laravel多个一对多关系中获取结果基于用户角色获取数据

Php 如何在laravel多个一对多关系中获取结果基于用户角色获取数据,php,laravel,eloquent,acl,Php,Laravel,Eloquent,Acl,我正在根据我的要求创建自定义ACL。但在这两者之间,我附加了一个数据库设计,其中用户只能属于一个部门,只能拥有该部门的一个角色,但可以在该部门拥有多个权限。但现在,当我试图获取针对用户角色的权限时,却显示了一个空数组,其中在数据库中有正确的条目 控制器中的控制器方法,其中是dd($data['getUserRoles'])返回以下结果空权限数组如何获取分配给特定角色的权限列表 public function index() { $user = new User(); $us

我正在根据我的要求创建自定义ACL。但在这两者之间,我附加了一个数据库设计,其中用户只能属于一个部门,只能拥有该部门的一个角色,但可以在该部门拥有多个权限。但现在,当我试图获取针对用户角色的权限时,却显示了一个空数组,其中在数据库中有正确的条目

控制器中的控制器方法,其中是
dd($data['getUserRoles'])返回以下结果空权限数组如何获取分配给特定角色的权限列表

 public function index()
{

    $user = new User();

    $user_id = Auth::id();

    $admin_user = $user->isAdmin();

    $assigned_roles = array();

    if (!$admin_user) {

        $data['getUserRoles'] = User::with('roles', 'permissions')->where('users.id', $user_id)->get();


        dd($data['getUserRoles']);

        foreach($data['getUserRoles'][0]->roles as $roles){

            $assigned_roles[] =  $roles->slug;
        }

        $data['assigned_roles'] = $assigned_roles;

        $data['departments'] =  Department::all();

    } elseif ($admin_user) {

        $data['getUserRoles'] = $user->getUserWithRoles();

        $data['departments'] =  Department::all();
    }

    $data['status'] =  array('Active', 'Inactive', 'Blocked');

    return view('users.users_list', $data);
}
结果

Illuminate\Database\Eloquent\Collection {#381 ▼
#items: array:1 [▼
  0 => App\User {#374 ▼
   #fillable: array:7 [▶]
   #hidden: array:2 [▶]
   #casts: array:1 [▶]
   #connection: "mysql"
   #table: "users"
   #primaryKey: "id"
   #keyType: "int"
   +incrementing: true
   #with: []
   #withCount: []
   #perPage: 15
   +exists: true
   +wasRecentlyCreated: false
   #attributes: array:12 [▶]
   #original: array:12 [▼
    "id" => 24
    "name" => "sana"
    "email" => "sana@mailinator.com"
    "email_verified_at" => null
    "password" => "$2y$10$NNtg6ikyKEijQmW1ZDvBE.OMVaFs7ZEj6qmpbr7h6uk/6Vjqq3NBu"
    "remember_token" => null
    "created_at" => "2020-01-30 08:27:48"
    "updated_at" => "2020-01-30 08:29:43"
    "full_name" => null
    "status" => "Active"
    "department_id" => 1
    "manager_id" => null
  ]
  #changes: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:2 [▼
    "roles" => Illuminate\Database\Eloquent\Collection {#380 ▼
      #items: array:1 [▼
        0 => App\Models\Role {#378 ▼
          #connection: "mysql"
          #table: "roles"
          #primaryKey: "id"
          #keyType: "int"
          +incrementing: true
          #with: []
          #withCount: []
          #perPage: 15
          +exists: true
          +wasRecentlyCreated: false
          #attributes: array:5 [▶]
          #original: array:7 [▶]
          #changes: []
          #casts: []
          #dates: []
          #dateFormat: null
          #appends: []
          #dispatchesEvents: []
          #observables: []
          #relations: array:1 [▶]
          #touches: []
          +timestamps: true
          #hidden: []
          #visible: []
          #fillable: []
          #guarded: array:1 [▶]
        }
      ]
    }
    "permissions" => Illuminate\Database\Eloquent\Collection {#369 ▼
      #items: []
    }
  ]
  #touches: []
  +timestamps: true
  #visible: []
  #guarded: array:1 [▶]
  #rememberTokenName: "remember_token"
}
]
}
用户模型

class User extends Authenticatable
{
 public function getUserWithRoles(){

    $getUserWithRoles = User::with('roles', 'permissions')->get();

    return $getUserWithRoles;
}

public function isAdmin(){

    return Auth::user()->roles()->where('name', 'admin')->exists();
}

public function department()
{
    return $this->belongsTo('App\Models\Department');
}
public function givePermissionsTo($permissions) {
    $permissions = $this->getAllPermissions($permissions);
    if($permissions === null) {
        return $this;
    }
    $this->permissions()->saveMany($permissions);
    return $this;
}

public function withdrawPermissionsTo($permissions) {
    $permissions = $this->getAllPermissions($permissions);
    $this->permissions()->detach($permissions);
    return $this;
}

public function deletePermissions($permissions) {
    $permissions = $this->getAllPermissions($permissions);
    $this->permissions()->detach($permissions);
    return $this;
}

public function refreshPermissions($permissions) {
    $this->permissions()->detach();
    return $this->givePermissionsTo($permissions);
}

protected function hasPermissionTo($permission) {
    return $this->hasPermissionThroughRole($permission) || $this->hasPermission($permission);
}

public function hasPermissionThroughRole($permission) {
    foreach ($permission->roles as $role){
        if($this->roles->contains($role)) {
            return true;
        }
    }
    return false;
}

public function hasRole( $roles ) {

    foreach ($roles as $role) {
        if ($this->roles->contains('slug', $role)) {
            return true;
        }
    }
    return false;
}

public function roles() {
    return $this->belongsToMany(Role::class,'users_roles');

}
public function permissions() {
    return $this->belongsToMany(Permission::class,'users_permissions');

}

protected function hasPermission($permission) {
    return (bool) $this->permissions->where('slug', $permission->slug)->count();
}

protected function getAllPermissions(array $permissions) {
    return Permission::whereIn('slug',$permissions)->get();
}
}

榜样

class Role extends Model
{

public function permissions() {
    return $this->belongsToMany(Permission::class,'roles_permissions');
}


public function allRoles(){

    $all_roles = Role::leftJoin('roles_permissions', function($join) {
        $join->on('roles.id', '=', 'roles_permissions.role_id');
    })
        ->get();

    return $all_roles;
}

public function user() {
    return $this->belongsToMany(User::class, 'users_roles');
}

public function roles() {
    return $this->belongsToMany(Role::class,'roles_permissions');

}

}如何获得用户?!您创建了一个用户模型,但它是空的,因为您创建了一个新的用户模型,但它是从数据库中获取的

如何获取用户?!您创建了一个用户模型,但它是空的,因为您创建了一个新的用户模型,但它是从数据库中获取的