Laravel多个角色的中间件[可能重复]

时间:2018-09-03 11:09:33

标签: php laravel

当前,我有一个系统,其中有两个完全独立的实体UsersAdmins,每个实体都有自己的表。

admins表中,有一个用于access_level的字段,因为管理员自己可以看到和管理的内容具有不同的访问级别。例如,只有具有admin访问级别的管理员才能创建新管理员。

中间件似乎是最好的选择。

在我的管理模型中,我有以下方法:

/**
 * Check whether this admin has full admin status
 *
 * @return void
 */
public function getIsAdminAttribute()
{
    return $this->access_level == 'admin' ? true : false;
}

/**
 * Check whether this user has Partial status
 *
 * @return void
 */
public function getIsFullAttribute()
{
    return $this->access_level == 'full' ? true : false;
}

/**
 * Check whether this user has Partial status
 *
 * @return void
 */
public function getIsPartialAttribute()
{
    return $this->access_level == 'partial' ? true : false;
}

/**
 * Check whether this admin has a particular role
 *
 * @param [type] $role
 * @return void
 */
public function getHasRoleAttribute($role)
{
    if($this->access_level == $role){
        return true;
    }

    return false;
}

所以现在我可以访问访问者is_admin, is_partial, is_full来检查当前登录管理员的权限。我也有一种方法来检查管理员是否具有给定的角色。

我称为Role的中间件看起来像这样:

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;

class Role
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $roles)
    {
        if (Auth::guard('admin')->user()) {
            $user = Auth::guard('admin')->user();

            if ($user->is_admin) {
                return $next($request);

                foreach($roles as $role){
                    // Check whether user has a given role
                    if($user->has_role($role)){
                        return $next($request);
                    }
                }
            }
        }

        return response('You do not have permission to perform this action', 401);
    }
}

然后在routes/web.php中像这样使用它:

Route::get('/vacancies', 'JobPostController@index')->name('vacancies.index')->middleware('role:partial');

但是当我将自己分配为局部时,我在访问路线时遇到401错误。

这些角色在admin表中,因为将永远只有3个角色,它们将始终与admin相关联。

0 个答案:

没有答案