亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 laravel Milldeware 中向具有特定角色的用戶驗證特定路由

如何在 laravel Milldeware 中向具有特定角色的用戶驗證特定路由

PHP
POPMUISE 2022-10-09 19:57:47
我有多個具有多種權限的用戶。一個用戶可以屬于唯一的單個角色,但該角色可以具有多個權限,例如create, read, update, delete。我有一個RoleMiddleware. 我正在對用戶進行身份驗證roleMiddleware。但是我怎樣才能防止routes特定RoleMiddleware用戶呢?例如,我有一條create-case只能由 訪問的路由operator,Admin否則每個人都重定向到404 error我如何處理它RoleMiddleware。我已經編寫了用于身份驗證的基本代碼,其中每個具有其角色的用戶都經過身份驗證,但是我正在了解如何在中間件中編碼,因此當用戶點擊它時,路由可能會轉到指向角色的RoleMiddleware中間件Authenticate路由,然后給他訪問權限。角色中間件class RoleMiddleware{    public function handle($request, Closure $next, $permission = null)    {        if (Auth::check() === false)        {            return redirect('login');        }        elseif (Auth::check() === true)        {            $roles = Role::all()->pluck('slug');            if (is_null($request->user()) )            {                abort(404);            }            if (!$request->user()->hasRole($roles))            {                abort(404);            }            if ($request->user())            {                if ($request->user()->hasRole($roles))                {                    return $next($request);                }            }        }    }}
查看完整描述

2 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

以干凈的方式做到這一點的最佳方法是在目標實體上創建策略。Laravel 策略允許你:

  • 將路由授權邏輯綁定到策略操作

  • 從項目中的任何其他位置(視圖、控制器等)輕松調用策略操作結果。

這個主題在 Laravel 文檔中有很好的介紹,所以我建議你去那里看看。不要忘記注冊策略并將其綁定到您的模型。

除此之外,這應該可以解決問題。

class CasePolicy

{

    use HandlesAuthorization;


    public function create(User $user){

        $roles = ['operator','Admin']

        return $user->hasRole($roles);

    }

}

然后在您的路線文件中:


Route::get('create-case', 'Cases\CaseController@index')->name('create-case')->middleware('can:create,App\Case');



查看完整回答
反對 回復 2022-10-09
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

我剛剛學習并實施了 Gate 和 Policy,希望這是正確的,因為它對我有用。偉大的概念謝謝。


Route::get('create-case', 'Cases\CaseController@index')->name('create-case')->middleware('can:create-case,App\Model\Case');

門:


class AuthServiceProvider extends ServiceProvider

{

    /**

     * The policy mappings for the application.

     *

     * @var array

     */

    protected $policies = [

        // 'App\Model' => 'App\Policies\ModelPolicy',


        User::class => CreateCase::class


    ];


    /**

     * Register any authentication / authorization services.

     *

     * @return void

     */

    public function boot()

    {

        $this->registerPolicies();


        Gate::define('create-case','App\Policies\CreateCase@create_case');


    }

}

政策


class CreateCase

{

    use HandlesAuthorization;


    /**

     * Create a new policy instance.

     *

     * @return void

     */

    public function __construct()

    {

        //

    }


    public function create_case(User $user){


        if($user->hasRole(['admin']) ||$user->hasRole(['operator']) && $user->hasPermissionTo('create')){


            return true;

        }else

            return false;


    }

}


查看完整回答
反對 回復 2022-10-09
  • 2 回答
  • 0 關注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號