【发布时间】:2018-04-21 09:17:23
【问题描述】:
我希望能够限制用户在我的 laravel 项目中只能看到他们自己的个人资料。因此,当用户想要访问他们的个人资料时,他们会转到 /userprofile/{id} 后跟的 url。但截至目前,任何用户都可以输入不同用户的特定 ID 并访问他们的个人资料。因此,如果我作为第一个注册用户登录,我的 id 将为 1。但我只想能够访问我的个人资料。如果我尝试在 url 中输入 id 2 或 3,我希望它把我踢回主页。知道我怎么能做到这一点吗?也许使用某种中间件?
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use DB;
use App\User;
use App\Salutation;
use App\Http\Requests\UserRequest;
use Auth;
class HomeController extends Controller
{
public function index(){
$users_info = User::all();
return view('userprofile.index', compact("users_info"));
}
public function show($user_info){
$user_info = User::find($user_info);
return view('userprofile.show', compact("user_info"));
}
public function create(){
return view('userprofile.create');
}
public function store(UserRequest $request){
$formData = $request->all();
User::create($formData);
return redirect('userprofile');
}
public function edit($user_info) {
$user_info = User::findOrFail($user_info);
return view('userprofile.edit', compact("user_info"));
}
public function update(UserRequest $request, $user_info){
$formData = $request->all();
$user_info = User::findOrFail($user_info);
$user_info->update($formData);
return redirect('userprofile');
}
public function __construct(){
$this->middleware('auth', ['only' =>['create', 'edit',
'destroy']]);
}
}
【问题讨论】:
-
你的控制器是什么样的?与其做
return User::find($id)之类的事情,不如做return Auth::user()。这就是它的全部内容。 -
有很多不同的方法来处理这个问题。可能是 devk 所说的,可能是检查 Auth::id() 是否与请求的 id 匹配,或者您可以使用 Laravel 中内置的 Gate/Authorization 逻辑并编写访问此端点的策略。你读过 Laravel 的文档吗?
-
我刚刚发布了我的用户控制器。还有一种方法可以做到这一点,我可以简单地检查请求ID是否与当前登录的用户ID相同,如果不是,将它们踢回主页?这就是为什么我问中间件是否可以工作。
-
您需要查询个人资料页面的用户id并与登录用户进行比较,并根据比较结果允许或重定向访问。
-
简单的解决方案是在
show中执行abort_unless($user_info == \Auth::id(), 403)
标签: php laravel authentication