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 关注
- 102 浏览
添加回答
举报