バージョン5.1以降、Laravelには必要とされるポリシーがあります。
は、コマンドを入力して、新しいポリシーを作成することができます。
php artisan make:policy UserPolicy
あなたUserPolicyクラスでは次の方法で含めることができます。
public function updateProfile(User $user, User $updatedUser) {
return $user->id === $updatedUser->id;
}
に注意してください。最初のパラメータ$ユーザーを舞台裏で自動的に解決され、現在ログインしているユーザーです。アプリケーションのゲートファサードからポリシーをチェックするときは、2番目のパラメータ$ updatedUserだけを渡す必要があります。
次にあなたがAuthServiceProviderであなたのポリシーを登録する必要があります。
use Acme\User;
use Acme\Policies\UserPolicy;
...
class AuthServiceProvider extends ServiceProvider {
protected $policies = [
User::class => UserPolicy::class
]
あなたが登録し、あなたのポリシーを持っている場合今、あなたはそうのような門のファサードを使用して、アプリ全体でそれを確認することができます:
if(Gate::allows('updateProfile', $user)) {
// Your logic goes here
}
または、私はdeniesメソッドを使用して多くを好きで、コントローラのメソッドの始めにそれを含めてhttpエラーを返します。
public function edit($id) {
if(Gate::denies('updateProfile', $user)) {
abort(403, 'You do not have permissions to access this page!');
}
// The check is passed and your can include your logic
}
また、缶を使用して、ご使用のブレード・ファイルの権限をチェックすることができるので、好きではないことができます。
@can('updateProfile', $user)
// Show something only to the user that can edit the $user's profile
@endcan
詳細情報についてはdocsをご確認ください。
しかし、ユーザーが別のIDを持つURLを直接入力するのを止めるのは何ですか? –
渡された '$ id'がデータベースに存在しないかどうかをあなたのコントローラで確認し、エラーやメッセージを投げることができます。 –