cms/app/Providers/AuthServiceProvider.php

66 lines
1.9 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Gate;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use Str;
class AuthServiceProvider extends ServiceProvider
{
/**
* The policy mappings for the application.
*
* @var array
*/
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
];
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
//administrator不受Gate限制
Gate::before(function($user, $ability) {
/** @var \App\User $user */
if($user->hasRole('administrator')) {
return true;
}
});
try {
// Register all permissions as gate ability
$allPermissions = Permission::all();
foreach ($allPermissions as $permission) {
/** @var Permission $permission */
$permissionName = $permission->name;
$gateName = 'permission:' . Str::kebab($permissionName);
Gate::define($gateName, function ($user) use ($permissionName) {
/** @var \App\User $user */
return $user->hasPermissionTo($permissionName);
});
}
// Register all roles as gate ability
$allRoles = Role::all();
foreach ($allRoles as $role) {
/** @var Role $permission */
$roleName = $role->name;
$gateName = 'role:' . Str::kebab($roleName);
Gate::define($gateName, function ($user) use ($roleName) {
/** @var \App\User $user */
return $user->hasRole($roleName);
});
}
} catch (\Exception $e) {}
}
}