限制';用户';在Laravel,同时仍然允许每个人编辑自己的';用户';


Restricting 'Users' in Laravel while still allowing everyone to edit their own 'User'

我还在学习Laravel&最佳实践。

我有一个用户系统,这样你就可以创建&通过UserController更新用户。只有管理员才能访问用户&操纵它们。所以我创建了以下路线:

Route::resource('user', 'UserController')->before('role:admin'); 

一切看起来都很好,工作也很好。我有一个过滤器,在登录用户可以访问与用户有关的任何内容之前,它会检查登录用户是否是管理员。

这就是我感到困惑的地方。登录但不是管理员的用户仍然可以编辑自己的信息(电子邮件、密码、用户名)。我已经使用相同的表单部分设置了一个新表单。我已经为编辑用户设置了表单部分,因为所有字段都是相同的,我想我可以使用相同的表格方法处理表单,以免重复处理,这是相同的:

{{Form::model($user, ['method'=>'PATCH', 'route'=>['user.update', $user->id]])}}

但是,因为我的用户不是管理员,他们被推回到403消息,而不是处理脚本。

如何在不失去UsersController管理限制的情况下,为用户编辑自己的信息破例?

简单的解决方案是创建一个具有不同访问限制的AccountController。在UsersControllerAccountController之间进行的任何公共处理都可以移动到模型中。