检查用户是否按组名称分组

时间:2014-11-14 08:32:56

标签: laravel-4 sentry

我可能会想到这个错误,但是不应该检查一个用户是否属于某个群组是非常普遍的事情吗?例如,如果您只想向管理员"显示某个菜单项,那么我的视图文件中是否应该有一种方法可以轻松检查用户是否属于该组?

我看到用户有一个inGroup()函数,但这要求您首先获取组对象,并将其传递给函数,而不是简单地传递组名,例如{{ 1}}。我也意识到我可以编写自己的方法来接受组名,查找它,然后在现有的$user->inGroup('Administrators');方法中使用它。

然而,事实上,这在文档中并不那么明显,这让我相信我正在以错误的方式思考它。

首选方式是给管理员"分组"管理员:1"权限,因此只检查用户是否具有该权限,而不是检查他们是否在该组中?

如果是这样,我很难看到一个群体的价值,因为你不能轻易地使用它们来确定访问权限;相反,您需要使用该组包含的各个权限。

1 个答案:

答案 0 :(得分:0)

您可以轻松查看用户是否属于某个群组:

$user = Sentry::findUserById(1);

$adminGroup = Sentry::findGroupByName('Admin');

$isAdmin = $user->inGroup($adminGroup);

但最好的方法是使用权限。您可以设置具有“管理用户帐户”权限的“管理员”组。然后,您只需检查用户是否有权“管理用户帐户”,而不是检查他们是否属于Admin组。 在我的“组”表中,我有这样一行:

id |名字|权限

1 |管理员| { “manageUserAccounts”:1}

我现在可以通过以下方式检查用户是否具有'manageUserAccounts'的权限:

$user = Sentry::findUserById($userId);

if ($user->hasPermission('manageUserAccounts') {
    print 'You can manage user accounts';
}
else {
    print 'Oops, you cant manage user accounts';
}

请注意,'user'表通过user_groups表连接到'group'表。 有关如何细粒度权限的详细信息,请参阅Sentry文档。它非常强大。