0

ACL用のSentry 2を備えたLaravel 4注:ログインにlaravel関数を使用していますが、権限を確認するためにACLの目的でのみsentryが必要です

これを達成したい:

if ( Sentry::getUser()->hasAnyAccess(['system']) )
{
echo 'has access to system';
}

しかし、私は次のエラーが発生し続けます:

Sentry::getUser()->hasAnyAccess(['system']); //this hits error: Call to a member function hasAnyAccess() on a non-object 
4

3 に答える 3

1

Sentry2 が認証を行う方法は、Laravel の組み込み認証システムと互換性がありません。私が理解している限り、Laravel の組み込み認証システムと Sentry2 は、ログインしているユーザーの詳細を保存するために異なるセッション キーを設定しています。そのため、Sentry2 を使用して laravel 認証ユーザーに関する詳細を取得することはできません。Userただし、モデルと Sentry2 で使用されるモデルの両方に同じデータベース テーブルを使用する場合、これは機能するはずです。

    Sentry::findById(Auth::user()->id)->hasAnyAccess(['system'])

Sentry を組み込みの認証と互換性のある方法で使用する場合は、このパッケージを確認することをお勧めします。

https://bitbucket.org/hampel/sentry-auth-driver-for-laravel

于 2013-12-12T07:44:02.267 に答える
0

ここでの問題は、Laravel Auth と Sentry が同じ変数を使用してユーザー情報を保存しないことです。そのため、Laravel のAuth::attempt()で認証すると、Sentry::getUser()が返されnullます。

その逆も当てはまります。 で認証した場合Sentry::authenticate()Auth::user()はオブジェクトを返しません。

最も簡単な解決策は、認証に対して全か無かのアプローチを行うことです。Laravel の部分を Sentry に交換するか、その逆です。

ネイティブ Laravel でロール ベースの ACL を実装した 1 つの方法は、列とピボット テーブルrolesを持つデータベースにテーブルを追加し、このアクセス チェック コードを User ドライバーに追加することです。このコードを使用すると、 などの構文で ACL を確認できます。nameAuth::user()->is(["admin", "publisher"])

于 2014-06-12T13:51:20.307 に答える
0

興味がある場合は、sentry を管理パネルに統合する laravel パッケージがあります: https://github.com/intrip/laravel-authentication-acl

于 2014-05-30T17:35:33.477 に答える