如果用户在角色中,则为Sentry / Sentinel

时间:2014-08-18 14:05:24

标签: laravel laravel-4 cartalyst-sentry

我正在尝试检查当前用户是否与Cartalyst的Sentinel / Sentry包具有特定角色。

我找到Sentinel::inRole('admin')但似乎无法让它发挥作用。我想要这样的东西:

if(Sentinel::getUser()->hasRole('admin'){ // do some stuff }

我已搜索并搜索过此内容,无法找到合适的示例。我应该更多地考虑权限还是什么?

希望有人可以指出我正确的方向。

干杯

3 个答案:

答案 0 :(得分:13)

您可以在此使用inRoleSentinel::getUser()->inRole('role_slug');。当然,这仅在用户登录时才有效。

您可能希望将其更改为类似的内容,以防止在非对象上调用inRole


    if ($user = Sentinel::getUser())
    {
        if ($user->inRole('administrator'))
        {
            // Your logic
        }
    }

希望有所帮助。

答案 1 :(得分:2)

让您的用户模型扩展Cartalyst的'EloquentUser'模型。这个型号有一个 getRoles()函数将返回该用户的角色。每个用户还有一个inRole($ role)函数,如果用户具有参数中指定的角色,该函数将返回true。

扩展看起来像这样:

use Cartalyst\Sentinel\Users\EloquentUser;

class User extends EloquentUser implements ... {
    ....
}

在我看来,这是达到你想要的最干净的方式。

如果您不想这样做,您可以检查权限,并将您的权限配置为角色

$admin = Sentinel::create()

$admin->permissions = [
    'admin' => true,
];

$admin->save();

然后检查用户的权限,而不是检查他们的角色

if($admin->hasAccess('admin') { // do some stuff }

希望这有帮助。

-Josh E

答案 2 :(得分:0)

我首先检查是否授权,如果是,那么看看是什么角色

所以工作

@if(!Sentinel::guest())
   @if(Sentinel::inRole('user'))
      <ul class="nav navbar-nav navbar-right">
         <li><a href="logout">{{trans('master.logout')}}</a></li>
      </ul>
   @endif
@endif