web-dev-qa-db-ja.com

Laravel 5新しい認証:現在のユーザーを取得し、ロールを実装する方法は?

現在、新しいLaravel 5を試し、認証(登録/ログイン)を実行しています。

コントローラーで認証されたユーザーを取得するために、現在Guardをコントローラーアクションに挿入します。

use App\Http\Controllers\Controller;
use Illuminate\Contracts\Auth\Guard;

class ClientController extends Controller {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index(Guard $auth)
    {
        return view('client.index', ['user' => $auth->user()]);
    }
...

最初の質問:これが推奨される方法ですか?

2番目の質問:何らかの種類の役割/権限を実装するにはどうすればよいですか?何かのようなもの client.editclient.add、... Larval 5はここで何らかの便利さを提供しますか?ルート/コントローラーアクションに必要な役割/許可をどのように設定しますか?

そのために自分のミドルウェアを書く必要があるかもしれないと考えています。問題へのアプローチ方法に関する提案はありますか?

20
cgross

Laravel 5にもう少し時間を費やした後、自分の質問に答えることができます。

Guardを推奨する方法で注入しますか?いいえ:ビューでAuthにアクセスする必要がある場合は、すでに次のようにできます。

@if( Auth::check() )
    Current user: {{ Auth::user()->name }}
@endif

これは、Authファサードを使用します。使用可能なすべてのファサードのリストは、config/app.phpの下のaliases:にあります

コントローラにAuthが必要な場合はどうすればよいですか?質問に示されているようにGuardのインスタンスを挿入しても機能しますが、必要はありません。テンプレートで行ったように、Authファサードを使用できます。

    public function index()
    {
        if(\Auth::check() && \Auth::user()->name === 'Don') {
            // Do something
        }
        return view('client.index');
    }

L5は名前空間を使用しているため、ファサード名の前に\が必要であることに注意してください。

L5の新しい認証メカニズムを使用してアクセス許可/ロールが必要です:新しいミドルウェアを使用して軽量のアクセス許可モジュールを実装しました。これはLaraguardと呼ばれます。 Githubでそれをチェックして、あなたの考えを教えてください: https://github.com/cgrossde/Laraguard

PDATE:完全を期すために、さらに2つのプロジェクトに言及したいと思います。 DBにロールと権限を保存し、Laraguardと完全に連携するか、単独で動作するために必要なすべてを提供します。

51
cgross

独自のカスタム認証を作成する場合は、ユーザーモデルをLaravel 5からすべての依存関係に維持する必要があります。コントローラーにユーザーをログインできるようになったら、忘れないでください。 (使用認証;)コントローラーの名前空間の後。

0
Gabriel Sigouin