lcloss/simple-permission

Laravel项目的授权模式

安装: 11

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

语言:CSS

类型:

0.0.5 2023-10-07 15:41 UTC

This package is auto-updated.

Last update: 2024-09-07 17:39:05 UTC


README

SimplePermission 是一个为 Laravel 设计的简单授权包。它专为 Laravel 10 设计,但也可能与其他版本兼容。使用此包,您可以为 Laravel 应用程序添加角色和权限,从而轻松管理授权。

安装

  1. 使用 composer 安装此包

    composer require lcloss/simple-permission
  2. 发布配置文件

    php artisan vendor:publish --provider="Lcloss\SimplePermission\SimplePermissionServiceProvider"
  3. 编译资源

    npm run build
  4. 运行迁移

    php artisan migrate
  5. HasRoles 特性添加到您的 User 模型中

    use Lcloss\SimplePermission\Models\Traits\HasRoles;
    
    class User extends Authenticatable
    {
        use HasRoles;
    }
  6. AuthGates 中间件添加到您的 app\Http\Kernel.php 文件中

    protected $middlewareGroups = [
        'web' => [
            // ...
            \Lcloss\SimplePermission\Http\Middleware\AuthGates::class,
        ],
    
        'api' => [
            // ...
            \Lcloss\SimplePermission\Http\Middleware\AuthGates::class,
        ],
    ];
  7. role 添加到 user,如果您使用 Laravel Fortify,则可以更改 App\Actions\Fortify\CreateNewUser.php 文件

    use Lcloss\SimplePermission\Models\Role;
    
    class CreateNewUser
    {
        // ...
        public function create(array $input)
        {
            // ...
            // If you are getting the first and last names:
            $name = trim($input['first_name'] . ' ' . $input['last_name']);
    
            DB::beginTransaction();
    
            $user = User::create([
                'name'      => $name,
                'email'     => $input['email'],
                'password'  => Hash::make($input['password']),
            ]);
    
            $countUsers = User::count();
    
            if ( $countUsers == 1 ) {
                $role = Role::where('slug', 'sysadmin')->first();
            } else {
                $role = Role::where('slug', 'user')->first();
            }
            $user->roles()->attach($role);
    
            DB::commit();
    
            return $user;
        }
    }

    根据上述配置,第一个创建的用户将是一个 sysadmin,其他用户将是 user

  8. 其他注意事项

检查包的 blade 文件。您可以通过在 config/simple-permission.php 文件中替换 blade 文件名来使用自己的 blade 文件。别忘了

a) 在布局文件中添加 @liwewireStyles() 和 @livewireScripts()。b) 在布局文件中添加 @yield('scripts')。c) 在布局文件的 body 结尾添加 @yield('modals')。

配置

您可以通过编辑 config/simple-permission.php 文件来更改此包的配置。

数据库 Seeder

此包包含一个数据库 Seeder,用于创建默认的角色和权限。您可以使用以下命令运行它

php artisan db:seed --class=SimplePermissionSeeder

或者,您也可以运行单独的 Seeder

php artisan db:seed --class=SimplePermissionRoleSeeder
php artisan db:seed --class=SimplePermissionPermissionSeeder

角色和权限

角色

此包包含以下默认角色:'sysadmin'、'admin'、'premium-user'、'user' 和 'free-user'。

每个角色都有一个唯一的 slug 和一个 level,用于确定角色的层次结构。级别为 1 的角色是最高级别的角色,级别为 300 的角色是最低级别的角色。所有级别为 1 的角色都享有所有权限。

您可以通过编辑 database\seeders\SimplePermissionRoleSeeder.php 文件来自定义角色。

权限

权限遵循 accesslist 和 CRUD 操作(createreadupdatedelete)的结构。通常,access 权限用于允许访问资源,list 权限用于允许列出资源,而 CRUD 权限用于允许对资源进行操作。

权限由一个 object 和一个 action 组成,由一个 _ 字符分隔。一个对象是一个资源,如 usersrolespermissionspostscomments。一个动作是对资源的操作,如 accesslistcreatereadupdatedelete

因此,权限 users_create 确定用户是否可以创建用户,而权限 users_list 确定用户是否可以列出用户。

您可以通过编辑 database\seeders\SimplePermissionPermissionSeeder.php 文件来自定义权限。

要保护路由,您可以使用 can 中间件

Route::get('/users', [UserController::class, 'index'])->middleware('can:users_list');

要保护控制器方法,您可以使用 can 中间件

use Gate;

class UserController extends Controller
{
    public function index()
    {
        Gate::authorize('users_list');
        
        // ...
    }
}

要保护视图的一部分,您可以使用 @can 指令

@can('users_list')
    <a href="{{ route('users.index') }}">Users</a>
@endcan

待办事项

  • 添加测试
  • 添加 artisan 命令