laravel - 如何在 Laravel Spatie 中正确使用超级管理员的角色
问题描述
正如文档中所写,我使用了 Laravel 的 Gate::before() 方法。
use Illuminate\Support\Facades\Gate;
class AuthServiceProvider extends ServiceProvider
{
public function boot()
{
$this->registerPolicies();
// Implicitly grant "Super Admin" role all permissions
// This works in the app by using gate-related functions like auth()->user->can() and @can()
Gate::before(function ($user, $ability) {
return $user->hasRole('Super Admin') ? true : null;
});
}
}
但它不起作用。我在 web.php 中的中间件 groupe 中担任过角色,并且它的工作。“超级管理员”角色没有任何权限。
Route::group(['middleware' => ['auth:api','role:Super Admin|Provider']], function() {
...
}
在我的 ProviderController
class ProviderController extends Controller
{
function __construct(){
$this->middleware('permission:provider-list|provider-create|provider-edit|provider-delete', ['only' => ['index','show']]);
$this->middleware('permission:provider-create', ['only' => ['create','store']]);
$this->middleware('permission:provider-edit', ['only' => ['edit','update']]);
$this->middleware('permission:provider-delete', ['only' => ['destroy']]);
}
我的问题是正确的方法吗?我提前谢谢你。
解决方案
我们经常使用 Spatie/laravel-permission ( docs )。您用于检查用户是否具有角色的代码是正确的。Spatie 的hasRole
函数不关心空格或破折号。然而,该函数确实关心角色是否实际存在。确保您迁移了正确的表,并将角色实际插入到您的数据库中。
\Spatie\Permission\Models\Role::create([
'name' => 'Super Admin',
'guard_name' => 'web',
]);
$user->assignRole(\Spatie\Permission\Models\Role::findByName('Super Admin'));
推荐阅读
- javascript - How do i connect my database with Angular app
- typescript - Vue&TypeScript:在项目目录外的 TypeScript 组件中实现导入时如何避免错误 TS2345?
- php - PHP KITE API V3: Code Exit after placing an order
- python - Keras 维度 LSTM net 3 dim 预期
- python-3.x - AWS Lambda 使用 Python 和 pyodbc 连接到 SQL
- html - 没有栏的窗口上的滚动条
- swift - 如何解决 UITableView 清单中的重复和重复检查?
- excel - 从类似名称的附件中提取附件
- c++ - 为自定义类 std::shared_ptr 实例调用 Operator()
- c# - 我应该使用设计模式将抽象基类中的逻辑放在其他地方吗?