0

Laravel 4 和 Sentry 2 用于 ACL 注意:我使用 laravel 功能登录,但只需要哨兵用于 ACL 目的,以检查权限

想要实现这个:

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 进行身份验证时Auth::attempt()Sentry::getUser()仍然会返回null.

反之亦然 - 如果您使用 , 进行身份验证Sentry::authenticate()Auth::user()则不会返回对象。

最简单的解决方案是对身份验证采取全有或全无的方法;要么将 Laravel 部分换成 Sentry,反之亦然。

我在本机 Laravel 中实现基于角色的 ACL 的一种方法是向roles数据库中添加一个表,该表上有一个name列 + 一个数据透视表,然后将此访问检查代码添加到我的用户驱动程序中。该代码允许我通过诸如Auth::user()->is(["admin", "publisher"])等的语法检查 ACL。

于 2014-06-12T13:51:20.307 回答
0

如果您有兴趣,有一个 laravel 包将哨兵与管理面板集成在一起:https ://github.com/intrip/laravel-authentication-acl

于 2014-05-30T17:35:33.477 回答