我正在尝试检查当前用户是否与Cartalyst的Sentinel / Sentry包具有特定角色。
我找到Sentinel::inRole('admin')
但似乎无法让它发挥作用。我想要这样的东西:
if(Sentinel::getUser()->hasRole('admin'){ // do some stuff }
我已搜索并搜索过此内容,无法找到合适的示例。我应该更多地考虑权限还是什么?
希望有人可以指出我正确的方向。
干杯
答案 0 :(得分:13)
您可以在此使用inRole
,Sentinel::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