【问题标题】:Sentry 2 for laravel 4 ACLlaravel 4 ACL 的哨兵 2
【发布时间】:2014-06-12 21:51:20
【问题描述】:

带有 ACL 的 Sentry 2 的 Laravel 4 注意:我使用 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 

【问题讨论】:

    标签: php laravel-4 cartalyst-sentry


    【解决方案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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        这里的问题是 Laravel Auth 和 Sentry 没有使用相同的变量来存储用户信息,所以当你使用 Laravel 的 Auth::attempt() 进行身份验证时,Sentry::getUser() 仍然会返回 null

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

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

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

        【讨论】:

          猜你喜欢
          • 2014-01-21
          • 2014-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-05
          • 2014-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多