php - 如何在 Laravel 中阻止相同类型的用户访问其他数据?

标签 php laravel laravel-4 laravel-5 laravel-routing

我的项目有两种类型的用户,管理员和客户。我需要通过 URL 传递 id 来阻止客户访问其他客户的详细信息,如下所述。在这个客户中有两类,高级客户和 guest 客户。这里我也需要以上功能。我正在使用过滤器将不同的仪表板路由到管理员和客户。我的 filter.php 文件如下。

Route::filter('auth', function()
{
    if (Auth::guest())
    {
        if (Request::ajax())
        {
            return Response::make('Unauthorized', 401);
        }
        else
        {
            return Redirect::route('home');
        }
    }
});

Route::filter('admin', function()
{
    if (Auth::user()->isAdmin != 0) return Redirect::route('getLogout');
});
Route::filter('client', function()
{
    if (Auth::user()->isAdmin != 1) return Redirect::route('getLogout');
});

Thsi 工作正常。

但是如果客户试图通过 URL 访问其他客户的详细信息,他将获得它。例如,在我的项目中有一个 URL 可以访问客户资料。这是通过像“localhost/public/profile/{id}”这样的 url 传递客户端 ID 来完成的。部分 route.php 文件如下。

Route::group(array('before' => 'auth'), function()
{
     Route::group(array('before' => 'auth|client'), function() 
     {
        Route::get('profile/{id}', array('uses' => 'ClientController@viewProfile', 'as' =>'viewProfile'));
     });
});

如何通过传递 ID、使用过滤器或其他方法阻止客户访问其他客户的资料?我尝试通过在 Controller 中指定,但它看起来不太好。

同样在我的客户中,有两种类型的客户。高级和 guest 客户。这些类型在名为 Clients 的模型中为名为 clients 的表指定。在 clients 表中有一个名为 type 的字段。我需要阻止 guest 客户端访问高级客户端可以访问的某些 URL。

有人能帮忙吗??

最佳答案

基本思路是创建一个 custom filter获取当前用户的 ID,将其与请求中的用户 ID 进行比较,然后采取所需的操作,这可能是重定向到其他地方。将它包裹在您希望它影响的任何路线上。

过滤器看起来像这样:

Route::filter('profile_access', function($route, $request, $value)
{
    $requestedId = $route->getParameter('id');
    $userId = MyUserService::getCurrentUser()->getId();

    // compare and redirect...
});

关于php - 如何在 Laravel 中阻止相同类型的用户访问其他数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29362875/

相关文章:

php - SqlClient.SqlException : Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fn_rt_getlevel", 或名称不明确

php - 将网站表单转换为 PDF 并通过电子邮件发送给网站管理员

php - 由于 php 超时,50 个或更多文件上传未完成

php - Laravel 如何仅响应没有正文消息的 204 代码状态

laravel - 表定义不正确;只能有一个自动列,并且必须将其定义为键

php - 用户登录脚本: Users can login with any username and password

javascript - 如何从 JSON 响应中读取数据

laravel - 使用 Laravel,我如何创建一个更新一对多关系的 View ?

php - 在 Blade 模板中提交订单时,禁用选择不会验证

mysql - EC2 AWS 上的 Laravel 4 php artisan migrate 命令出现 PDO 异常