Laravel 7:如何按用户限制URL ?



我是一个正在学习Laravel 7的新手。我用Laravel 7开发了一个小的web应用程序。但是今天我注意到一个问题。所有的url都是全局的,这意味着所有用户都可以访问我网站的所有url。假设用户A创建了数据,它显示在一个表中,其中每行都有编辑和删除按钮。编辑URL为:localhost/records/edit/5。问题是,其他登录用户也可以访问此编辑页面。像这样,所有的url都可以被任何登录的用户访问,这是非常糟糕的。我希望你明白我在说什么。我有几乎250 + web路线。有什么简单的方法来限制这些路线吗?用户只能访问自己的数据。我该怎么做呢?由于

你必须注册策略,确保用户在没有正确授权的情况下不能访问网站的部分内容。

请参阅文档,了解如何编写和实现策略。

<标题>示例代码:

政策:

class RecordPolicy 
{
public function delete(User $user, Record $record)
{
return $user->id === $record->user_id;
}
}
h2控制器

class RecordController
{
public function destroy(Record $record)
{
// Authorize the delete action before actually deleting the record
$this->authorize('delete', $record);
$record->delete();
}
}

记录索引
@foreach($records as $record)
<div> 
{{ $record->name }}
{{-- Only show delete button if the authorized user can actually delete the record --}}
@can('delete', $record)
<form action="{{ route('records.destroy', compact('record') }}" method="POST">
@csrf
@method('DELETE')
<button type="submit">Delete record</button>
</form>
@endcan
</div>
@endforeach
  1. 当新记录添加时存储user_id>在user_table DB
  2. 中添加created_by字段
  3. 当用户运行URL比;从会话中获取登录用户user_id,并在数据库中检查他们的记录>如果没有找到记录,则重定向到主页,否则继续。

如果我没理解错的话,你是想限制路由给特定的用户。

  1. 创建角色表
Columns (id, name) 
(1 = Super Admin, 2 = Admin, 3 = User)
  1. 在创建新用户时为用户分配角色例如,将role_id添加到users表中。
$user = User::create([
'name' => 'First Admin',
'email' => 'admin@admin.com',
'password' => Hash::make('Admin@1234'),
'role_id'  => 2 // For admin role
]);
  • 然后为每个角色创建仿真中间件,并限制为特定用户路线。
  • Admin Middleware: AdminMiddleware.php

    public function handle(Request $request, Closure $next)
    {
    $allowedRoles = [2];
    if (!in_array(Auth::user()->role_id, $allowedRoles))
    {
    return redirect()->back()->with('error',__('Sorry, you are not authorized to access that location.'));
    }
    return $next($request);
    }
    

    在Kernel.php

    'admin' => AppHttpMiddlewareAdminMiddleware::class,
    
    Route::group(['middleware' => 'admin'], function(){
    // All admin Routes
    });
    

    你也可以使用空间包。

    https://spatie.be/docs/laravel-permission/v5/basic-usage/middleware

    Just Check Role是否允许使用该路由:

    Route::group(['middleware' => ['auth', 'role:admin']], function () {
    // All routes available for admin
    });
    

    相关内容

    • 没有找到相关文章

    最新更新