caydeesoft / permission
Laravel 用户权限包
Requires
- php: ^8.0|^8.1|^8.2|^8.3|^8.4|^8.5
README
一个简单且灵活的 Laravel 授权和角色权限管理
为什么我们需要一个 Laravel 权限包
在许多项目中,我们需要为我们的用户实现一个基于角色的权限管理系统。虽然 Laravel 提供了管理用户权限的最佳工具,但我构建了这个包,使其更加简单、灵活,并避免在基于 Laravel 的许多网络项目中重复工作。
如何使用
我们的想法是将这个包使用得尽可能简单和灵活。
这个包创建了一个包含所有路由的列表,并将这些权限列表分配给用户角色。
尽管 `laravel-permission` 包做了大部分工作,但你仍然可以轻松扩展它并实现你的授权系统。
安装
首先,通过 composer 安装这个包。在您的终端中运行此命令
$ composer require caydeesoft/permission
之后,您需要运行迁移文件
$ php artisan migrate
在用户模型上添加
use Caydeesoft\Traits\HasRoles; class User extends Authenticatable { use HasRoles;
如何授权用户
这个包向 `users` 表添加了 `role_id`。角色存储在 `roles` 表中。您可以在管理员面板中或通过创建种子文件来为用户分配角色。
然后,您只需将 `auth.role` 中间件分配给您的路由。
将路由分配给角色
除了中间件和其他路由设置外,您还可以在路由组中使用 `role` 键来为您的路由分配角色。
您可以将为角色指定的路由放在这样的 `Route` 组中
Route::group([ 'middleware' => 'auth.role', 'prefix' => ..., 'role' => ['admin', 'customer'], 'access_level' => ['owner', 'client'] ... ],function (){ ... Route::get('/home', 'HomeController@index')->name('home'); Route::get('/product', 'ProductController@index'); ... });
当然,您可以有尽可能多的这样的路由组。
然后您需要运行这个 artisan 命令来注册所有权限
$ php artisan permissions:generate
这个命令将注册所有权限并将权限分配给角色。
如果您将 `fresh` 选项添加到这个命令中,它将删除所有数据并生成新的权限数据
$ php artisan permissions:generate --fresh
现在只有拥有适当角色的用户才能访问分配给他们的路由。
别忘了,这个包不处理将角色分配给用户。您需要在您的管理面板或其他处理用户的地方处理这个问题。
再次提醒,如果您想手动将权限添加到路由,不需要在您的路由组中添加 `role` 键。您可以在您的管理面板中轻松地为角色分配权限,或者为它创建另一个种子文件。
如何创建角色
`php artisan permissions:generate` 命令会创建在路由中定义的所有角色(如果它们不存在的话)。
此外,您还可以创建一个种子文件来填充 `roles` 表。它只需要一个 `name` 字段。
您的 `RolesSeeder` 文件可以像这样。
Role::firstOrCreate(['name' => 'admin']); Role::firstOrCreate(['name' => 'customer']);
别忘了在您的种子中导入 `Role` 模型。
use Caydeesoft\Permission\Models\Role;
如何清除权限
要清除已注册的权限,您可以运行此命令
$ php artisan permissions:clear
您可以使用此命令清除特定角色的所有权限数据
$ php artisan permissions:clear --roles role1 role2
要清除仅权限列表,请使用带有此选项的 `permissions:clear` 命令
$ php artisan permissions:clear --tables permissions
要清除所有角色
$ php artisan permissions:clear --tables roles
要清除仅权限角色关系
$ php artisan permissions:clear --tables permission_role
此命令会删除分配给角色的所有权限,以便您可以重新生成权限
此外,您可以组合使用这些选项
$ php artisan permissions:clear --roles admin --tables permission_role
在刀片模板路由上,您现在可以像这样检查路由访问
@canaccess(routename e.g 'home.index') <a href="{{ route("home.index") }}">Home</a> @endcanaccess
在控制器上,您可以像这样检查路由
use Caydeesoft\Permission\Helpers\Helpers; class HomeController extends Controller { public function index() { if(Helpers::can_access({routename e.g 'home.index'})) { do something; } else { do other things; } } }
关于
我在项目中使用这种Laravel权限管理方法有一段时间了。它使Laravel权限管理变得对我既简单又灵活。我希望它也能帮到您。所有拉取请求都欢迎。Amir Yousefi包的贡献(点击查看)
大部分工作基于我的关于Laravel授权和角色权限管理的文章