質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

1147閲覧

Laravel5.7での認可処理

Lab-art_Yamada

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/05/01 15:43

編集2019/05/01 15:46

Laravel5.7で認可処理を実装しようとしているのですが、どうしても403になってしまいます。。。

Userクラス:make authで作成し項目を追加。
Visitorクラス:Userクラスが複数持つ事ができる招待者のクラス。

AuthServiceProvider

1<?php 2 3namespace App\Providers; 4 5use Illuminate\Support\Facades\Gate; 6use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; 7use app\Http\Model\Visitor; 8use app\Policies\VisitorPolicy; 9 10class AuthServiceProvider extends ServiceProvider 11{ 12 /** 13 * The policy mappings for the application. 14 * 15 * @var array 16 */ 17 protected $policies = [ 18 //'App\Model' => 'App\Policies\ModelPolicy', 19 Visitor::class => VisitorPolicy::class, 20 ]; 21 22 /** 23 * Register any authentication / authorization services. 24 * 25 * @return void 26 */ 27 public function boot() 28 { 29 $this->registerPolicies(); 30 } 31} 32

VisitorPolicy

1<?php 2 3namespace App\Policies; 4 5use App\User; 6use App\Http\Model\Visitor; 7use Illuminate\Auth\Access\HandlesAuthorization; 8 9class VisitorPolicy 10{ 11 use HandlesAuthorization; 12 13 /** 14 * Create a new policy instance. 15 * 16 * @return void 17 */ 18 public function __construct() 19 { 20 // 21 } 22 23 24 public function view(User $user) 25 { 26 return true; 27 } 28} 29

VisitorController

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Http\Requests\VisitorRequest; 7use App\Http\Model\Visitor; 8use Illuminate\Support\Facades\Auth; 9 10use App\Exports\VisitorExport; 11 12class VisitorController extends Controller 13{ 14 15 /** 16 * Create a new controller instance. 17 * 18 * @return void 19 */ 20 public function __construct() 21 { 22 $this->middleware(['auth']); 23 } 24 25 26 27 public function edit(int $id) 28 { 29 30 $this->authorize('view', Visitor::class); 31 32 $data = Visitor::find($id); 33 34 return view('visitor.edit',['data'=>$data]); 35 } 36 37 38 39} 40

User

1<?php 2 3namespace App; 4 5use Illuminate\Notifications\Notifiable; 6use Illuminate\Contracts\Auth\MustVerifyEmail; 7use Illuminate\Foundation\Auth\User as Authenticatable; 8use App\Notifications\JaPasswordReset; 9use App\Http\Model\Chapter; 10use App\Http\Model\Visitor; 11 12class User extends Authenticatable 13{ 14 use Notifiable; 15 16 /** 17 * The attributes that are mass assignable. 18 * 19 * @var array 20 */ 21 protected $fillable = [ 22 'chapter_id','name01','name02','kana01','kana02','company','category','base_comment', 'email', 'password','role' 23 ]; 24 25 /** 26 * The attributes that should be hidden for arrays. 27 * 28 * @var array 29 */ 30 protected $hidden = [ 31 'password', 'remember_token', 32 ]; 33 34 35 public function visitor() 36 { 37 return $this->hasMany('App\Model\Visitor' , 'member_id' , 'id'); 38 } 39 40 public function sendPasswordResetNotification($token) 41 { 42 $this->notify(new JaPasswordReset($token)); 43 } 44}

Visitor

1<?php 2 3namespace App\Http\Model; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Notifications\Notifiable; 7 8class Visitor extends Model 9{ 10 11 use Notifiable; 12 13 14 protected $table = 'visitors'; 15 16 /** 17 * The attributes that are mass assignable. 18 * 19 * @var array 20 */ 21 protected $fillable = [ 22 'visit','company','name01','name02','kana01','kana02','category','member_id','member_name','comment', 'status' 23 ]; 24 25 /** 26 * The attributes that should be hidden for arrays. 27 * 28 * @var array 29 */ 30 protected $hidden = [ 31 'password', 'remember_token', 32 ]; 33 34 35 public function user() 36 { 37 return $this->belongsTo('App\User','member_id'); 38 } 39 40 41} 42

どの辺りに問題がありそうでしょうか?
その他、確認が必要なクラスがあれば追記させて頂きます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/05/01 20:45

403はLaravelが出力しているものでしょうか?サーバーが出力しているものでしょうか?
guest

回答2

0

どうしたいのか明確に書かれていないので微妙なんですが

一般的には

$this->authorize('view', Visitor::class); // Visitorクラスに関連する操作をできるか?みたいな感じ $data = Visitor::find($id);

ここが

$data = Visitor::find($id); $this->authorize('view', $data); // 特定のVisitorインスタンスをログイン中のユーザで表示できるか みたいな感じ

こうなります。

また、現在は無条件でtrueなので
そのユーザが保有するvisitorのみに限りたい場合は

public function view(User $user, Visitor $visitor) { return $visitor->member_id == $user->id; }

みたいにする必要があるでしょう

投稿2019/05/01 22:23

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lab-art_Yamada

2019/05/01 23:08

ご回答ありがとうございます。 本来ならおっしゃっている様な感じにするのですが、現在の全く無条件の状態でも403になってしまうので困っています。。。
mikkame

2019/05/02 03:26

visitorのインスタンスを入れても403になってしまうでしょうか?
Lab-art_Yamada

2019/05/02 04:02

そうだったんですけど、よく分からないですが解決しました。。。
guest

0

自己解決

すみません。解決?しました。

Gitでソースコードを共有している別の環境だと問題なく動作しました。

こういった場合、何が原因なんでしょうかね?

皆さまありがとうございました。
お騒がせしました(^^;

投稿2019/05/02 04:04

Lab-art_Yamada

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問