2017-02-28 8 views
1

アクセス許可がない場合は、ユーザーが特定のページやボタンにアクセスできないようにするアクセス許可チェックを行いたいと思います。私のデータベースには、ユーザー、権限、および各ユーザーの権限を割り当てるpermission_userテーブル用のテーブルがあります。Laravel 5.2カスタムユーザーのアクセス許可のチェック

ここでは、データの要約をすべて表示したテーブルがあり、そこには一連のボタンがあり(ビュー、編集など)、これらのすべてを行うことはできないユーザーもいるので、ボタンを非表示/無効にします。 URLに入力すると(たとえば、public/admin/edit/idなど)、これらのボタンにリンクされている制限付きページにアクセスすることを希望しません。ここで

は私のコントローラ

public function showDetails($action, $id) 
    { 
     return view('pages.admin.form_details', ['action' => $action, 'id' => $id]); 
    } 

この例機能の一部

PermissionID PermissionName 
     1   View 
     2   Add 
     3   Edit 
     4   Delete 

が今私のpermissions_userテーブルに、それはここでは、この

PermissionID AccountID 
     1    2 

のようなものです、現在利用可能なアクセス許可されています詳細ページが表示され、アクションが返されます(表示または編集のいずれかの文字列)ビューまたは編集ページの表示のチェックは私のブレードで行われます。可能であれば、すべてのチェックを一度に行いたい(ユーザーがミドルウェアを使用してログインしているかどうかにかかわらず、すべてのページをチェックインするように)。私は実際にzizaco委託を試みましたが、私はそれを実装する方法を理解せず、私のプロジェクトからそれを削除しました。

私は、各ページコントローラのショー機能でこれを行うことを考えてきました。

if($action == "edit) 
//check if edit permission exists for the authenticated user. if not abort and show error page. 

私はこれを行うには非効率的で反復的だと思います。より良い解決策がありますか?または、私が簡単に統合できるパッケージですか?

答えて

1

Laravel 5.2は、このための適切な機能を持っています。

  1. 登録ポリシー

    protected $policies = [ 
        'App\Model' => 'App\Policies\ModelPolicy', 
    ]; 
    
    public function boot(GateContract $gate) 
    { 
         $this->registerPolicies($gate); 
    } 
    
  2. 定義ポリシー

    public function index(User $user) 
    { 
        return // your validation; 
    } 
    
    public function create(User $user) 
    { 
        return // your validation; 
    } 
    
  3. 確認する方針あなたのコントローラで

あなたのビューで
public function store(ModelRequest $request) 
{ 
    $this->authorize('create', $model); 
    // your code to create a new model 
} 

重要
@can('create', $post) 
    <!-- If user can create a model --> 
@endcan 

はそのようにそれを使用して、コントローラにポリシーをチェックすることですが、ユーザーが文句を言わない彼が持っていない場合は、次のいずれかの手順を実行するために許可されます適切な権限

一方、他のSOユーザの言葉通りにいくつかのパッケージがありますが、あなたのリクエストは本当に簡単なので、Laravelからの認証を使うことができます。

+0

あなたの答えをありがとう!ドキュメントが分かりにくいので、私にとって非常に役に立ちます。 –

+0

あなたはようこそ... – georgeos

0

Laravel 5.2は、認可のための組み込みメソッドがあります。

https://laravel.com/docs/5.2/authorization

ポリシーが特に優れている、彼らはあなたが探している権限の種類を表します。

さらに多様性が必要な場合は、laravel-permissionpackageをspatieで見ると、役割管理などの多くの機能が追加されます。

+0

Spatieが良いかもしれません。私はそれを理解するために再び文書を読むことを試みるでしょう。ありがとう。 –

+0

私はlaravel-permissionパッケージを提案しようとしていました。私はちょうど私のアプリケーションでパッケージを実装し終わったばかりです。あなた自身/繰り返しコードを書くことよりも、動作する方法を理解する価値があるのです。 – cbloss793

0

Laravelには、必要に応じて動作する認証システムが含まれています。あなたはすでにそれをチェックしましたか?私は、彼らはあなたのアプリケーションが大きくなった場合、よりスケーラブルである可能性があるので、能力を定義するポリシーを使用することを好むAuthorizations

https://laravel.com/docs/5.2/authorization

+0

私はしましたが、正直なところそれをあまり理解していませんでした。これは私のプロジェクトの構造と一緒に使えますか? –

関連する問題