laravel轴的负载关系

5anewei6  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(324)

在我的网站,我有用户,角色和权限。
每个用户都属于许多角色(例如user.php)和名为“role\u user”的透视表

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

每个角色都属于多个权限(例如role.php)和名为“permission\u role”的透视表

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

我想以某种方式访问用户权限,但我似乎想不通。基本上我在user.php上需要这样的东西

public function permissions()
{
    return $this->roles()->permissions();
}

这可能吗?请帮忙。谢谢您。

o2rvlv0m

o2rvlv0m1#

拉雷维尔没有一个直接关系的本地支持。
我为此案例创建了一个包:https://github.com/staudenmeir/eloquent-has-many-deep
你可以这样使用它:

class User extends Model {
    use \Staudenmeir\EloquentHasManyDeep\HasRelationships;

    public function permissions() {
        return $this->hasManyDeep(
            Permission::class, ['role_user', Role::class, 'permission_role']
        );
    }
}
qgelzfjb

qgelzfjb2#

如果您使用的是json格式的结果,那么如果您实现了有说服力的资源,这应该非常容易
定义以下三种资源:
(注意:要轻松定义如下所示的资源,请执行以下操作:

php artisan make:resource UserRes

然后根据需要修改toarray函数。)
用户资源

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserRes extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $user = parent::toArray($request);
        $user["roles"] = RolesRes::collection($this->roles);
        return $user;
    }
}

角色

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class RolesRes extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $res =  parent::toArray($request);
        $res["permissions"] = $this->permissions;
        return $res;
    }
}

许可证:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class PermissionsRes extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $perm = parent::toArray($request);
        return $perm;
    }
}

在我的应用程序中,这里是获取单个用户时结果示例的屏幕截图。注意多个角色的嵌套,在这些角色下有多个权限。查询单个用户时json响应的屏幕截图

相关问题