当用户的角色 ID 为 1 时,中间件中的以下代码工作正常,当我在角色->权限上执行 dd 时,我得到的响应是数组。
但是在这个中间件线上
if (in_array($role->permissions, $permission)) {
对于 role_id 不同的所有其他用户,我都会收到此错误
in_array(): 参数 #2 ($haystack) 必须是数组类型,给定数组传递的字符串
我的角色模型有
protected $casts = [
'permissions' => 'array',
];
我的用户模型有
protected function role()
{
return $this->hasOne(Roles::class, 'id', 'role_id');
}
我的网络中间件组有
\App\Http\Middleware\RolePermissionCheck::class,
我的 Meddlware 有
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Gate;
class RolePermissionCheck
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!empty(Auth::user()->role_id)) {
$role = Auth::user()->role;
Gate::before(
function () {
if (Auth::user()->role_id === 1) {
return true;
}
}
);
// dd($role->permissions);
foreach ($role->permissions as $permission) {
Gate::define(
$permission,
function ($role) use ($permission) {
if (in_array($role->permissions, $permission)) {
return true;
}
}
);
}
}
return $next($request);
}
}