laravel的权限-laravel 权限

2025-03-17 0 11

《laravel的权限-laravel 权限》

解决方案简述

在Laravel项目中,实现权限管理是保障系统安全、有序运行的重要环节。一个有效的解决方案是通过使用第三方包如spatie/laravel - permission来快速搭建权限体系,它能方便地创建角色和权限,并且与Laravel的认证系统很好地集成。

基于spatie/laravel - permission实现权限控制

安装

在终端执行以下命令安装该包:

composer require spatie/laravel-permission

然后发布配置文件:
php
php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider"

接下来迁移数据库:
php
php artisan migrate

创建角色和权限

可以在Tinker(Laravel自带的交互式命令行工具)中或者控制器里创建。例如在控制器里:
```php
use SpatiePermissionModelsRole;
use SpatiePermissionModelsPermission;

// 创建权限
Permission::create(['name' => 'edit articles']);
// 创建角色
$role = Role::create(['name' => 'writer']);
// 给角色分配权限
$role->givePermissionTo('edit articles');
```

在中间件中使用

可以自定义中间件来检查用户是否有权限访问某个路由。新建中间件HasPermission.php:
```php
namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;
use SpatiePermissionExceptionsUnauthorizedException;

class HasPermission
{
public function handle($request, Closure $next, ...$permissions)
{
if (Auth::guest()) {
throw UnauthorizedException::notLoggedIn();
}

    $permissions = is_array(end($permissions)) ? end($permissions) : $permissions;

    foreach ($permissions as $permission) {
        if (Auth::user()->can($permission)) {
            return $next($request);
        }
    }

    throw UnauthorizedException::forPermissions($permissions);
}

}

注册中间件后,在路由中使用:
php
Route::get('/edit/article', [ArticleController::class,'edit'])->middleware('permission:edit articles');
```

其他思路

除了使用spatie/laravel - permission,还可以自己从头构建权限系统。这需要创建角色、权限等模型以及对应的数据库表结构,定义好它们之间的关系,比如一个用户可以有多个角色,一个角色可以有多个权限。然后在用户登录时查询其拥有的权限,在各个业务逻辑处进行权限判断。不过这种方式比较繁琐,而使用成熟的第三方包可以节省大量开发时间并且可靠性较高。

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载