2016-09-17 18 views
6

Tôi không thể tìm thấy nó trên tài liệu. Làm cách nào để chuyển hướng người dùng trái phép?Laravel 5.3 chính sách cách chuyển hướng người dùng trái phép

RolePolicy.php

class RolePolicy 
{ 
    use HandlesAuthorization; 

    public function manageRoles(User $user) 
    { 
     return $user->isAdmin(); 
    } 
} 

RolesController.php

function __construct() 
{ 
    $this->authorize('manageRoles', Role::class); 
} 

Cảm ơn trước

+0

Tại sao cuộc bỏ phiếu lại bị bỏ phiếu? :(Có gì sai? –

Trả lời

2

Theo như tôi biết, điều này không khác gì trong Laravel 5.3 vì nó đang ở trong bất kỳ phiên bản nào của Laravel 5.

Có một middleware tuyến đường được đặt tên auth nó liên quan tới App\Http\Middleware\Authenticate (được định nghĩa trong app/http/Kernel.php)

Trong lớp này:

public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::guard($guard)->guest()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('login'); 
     } 
    } 

    return $next($request); 
} 

auth middleware này có thể được áp dụng cho các tuyến đường yêu cầu xác thực .

Đọc thêm về middleware đây: https://laravel.com/docs/5.3/middleware

Đọc thêm về xác thực ở đây: https://laravel.com/docs/5.3/authentication

+1

nhưng tôi muốn ủy quyền thông qua bộ điều khiển https://laravel.com/docs/5.3/authorization#via-controller-helpers –

+0

Kiểm tra https://laracasts.com/discuss/channels/laravel/policy này -authorize-redirect-instead-of-403 –

4

Bạn có thể sửa đổi tập tin app\Exceptions\Handler.php

về chức năng render:

public function render($request, Exception $e) 
{ 

    /**modified part**/ 
    if ($request->wantsJson()) { 
     return response([ 
      'success' => false, 
      'message' => $e->getMessage() 
     ], 404); 
    } 

    if ($e instanceof AuthorizationException) { 
     return redirect('path'); 

     //or simply 
     return view('errors.forbidden'); 
     //but this will return an OK, 200 response. 
    } 
    /**end of modified part**/ 

    return parent::render($request, $e); 
} 

Nếu bạn muốn để đặt 403, hãy sử dụng hàm trợ giúp response(). Bạn có thể xem tài liệu cho các câu trả lời tại đây https://laravel.com/docs/master/responses

Về cơ bản, bạn có thể sử dụng giải pháp trên để chơi với nhiều tùy chọn hơn. Nhưng cách dễ nhất là tạo một tệp xem: errors/403.blade.php và chế độ xem đó sẽ tự động tải khi bạn nhấn các ngoại lệ trái phép. Tương tự sẽ làm việc cho 404 không tìm thấy, chỉ cần tạo ra 404.blade.php.

Các vấn đề liên quan