从Laravel中间件中的函数返回值

时间:2019-02-15 15:22:41

标签: laravel

我的管理模型中有一个功能,该功能通过多对多关系连接到角色模型。我创建了一个中间件来检查管理员的角色并将其重定向到他们的仪表板,但是我不确定它是否返回正确的值。这是我检查-> Auth::check() && Auth::user()->role()的方法。我的意思是role()方法正在返回role_id,但是如何检查呢?就像Auth::check() && Auth::user()->role()->role_id == 1一样,尽管这不是正确的方法

2 个答案:

答案 0 :(得分:1)

您可以在User(或Admin)中创建可验证的模型:

<?php 

public function hasRoles(array $roles)
{
    return $this->roles()->whereIn('role_id', [$roles])->exists();
}

// Then you can check using ids
const ADMIN_ROLE = 1;
const OTHER_ROLE = 2;

if(Auth::user() && Auth::user()->hasRoles([self::ADMIN_ROLE, self::OTHER_ROLE])){
// Current user is either admin or other role
}

如果您有角色的名称,那么也可以使用它代替ID。

答案 1 :(得分:0)

这是更好的方法。

在用户模型中,编写类似以下的函数。

public function hasRole( ... $roles ) {
   foreach ($roles as $role) {
      if ($this->roles->contains('column_name', $role)) {
         return true;
      }
   }
   return false;
}

在中间件中,您将编写如下内容

if(Auth::user() && Auth::user()->hasRole("admin", "moderator)){
   return $next($request);
}

这样,您就不必检查id了,因为id可能会更改。