Laravel 4和Sentry 2用于ACL 注意:我使用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
答案 0 :(得分:1)
Sentry2进行身份验证的方式与Laravel的内置身份验证系统不兼容。据我所知,Laravel的内置身份验证系统和Sentry2设置了不同的会话密钥来存储登录用户的详细信息。因此,无法使用Sentry2来提取有关laravel身份验证用户的详细信息。但是,鉴于您对User
模型和Sentry2使用的模型使用相同的数据库表,这应该可行。
Sentry::findById(Auth::user()->id)->hasAnyAccess(['system'])
如果您想以内置的auth兼容方式使用Sentry,您可能需要检查此包。
答案 1 :(得分:0)
如果您有兴趣,可以使用laravel包将Sentry与管理面板集成:https://github.com/intrip/laravel-authentication-acl
答案 2 :(得分:0)
此处的问题是Laravel Auth和Sentry不使用相同的变量来存储用户信息,因此当您使用Laravel的Auth::attempt()
进行身份验证时,Sentry::getUser()
仍会返回null
。
反之亦然 - 如果您使用Sentry::authenticate()
进行身份验证,则Auth::user()
不会返回对象。
最简单的解决方案是采用全有或全无的身份验证方法;或者将Laravel部分替换为Sentry,或者反之亦然。
我在本机Laravel中实现基于角色的ACL的一种方法是向数据库添加roles
表,其上有name
列+数据透视表,然后添加{{3}到我的用户驱动程序。该代码允许我通过Auth::user()->is(["admin", "publisher"])
等语法检查ACL。