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');

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;
}
}
- 2 回答
- 0 關注
- 128 瀏覽
添加回答
舉報