Laravel 4 按组名检查用户是否在组中
我可能认为这是错误的,但需要检查用户是否属于某个组不是很常见吗?例如,如果您只想向“管理员”显示某个菜单项,我的视图文件中是否应该有一种方法可以轻松检查用户是否属于该组 我看到用户上有一个Laravel 4 按组名检查用户是否在组中,laravel-4,sentry,Laravel 4,Sentry,我可能认为这是错误的,但需要检查用户是否属于某个组不是很常见吗?例如,如果您只想向“管理员”显示某个菜单项,我的视图文件中是否应该有一种方法可以轻松检查用户是否属于该组 我看到用户上有一个inGroup()函数,但这要求您首先获取组对象,并将其传递到函数中,而不是简单地传递组名,例如,$user->inGroup('Administrators')。我还意识到我可以编写自己的方法来接受组名,查找它,然后在退出的inGroup()方法中使用它 然而,事实上,这在文档中并不明显,这让我相信我的想法是
inGroup()
函数,但这要求您首先获取组对象,并将其传递到函数中,而不是简单地传递组名,例如,$user->inGroup('Administrators')代码>。我还意识到我可以编写自己的方法来接受组名,查找它,然后在退出的inGroup()方法中使用它
然而,事实上,这在文档中并不明显,这让我相信我的想法是错误的
首选的方法是给“Administrators”组一个“admin:1”权限,因此只检查用户是否有该权限,而不是检查他们是否在组中
如果是这样的话,我很难看到一个群体的价值,因为你不能轻易地使用他们来确定访问权限;相反,您需要使用组包含的个人权限。您可以轻松检查用户是否属于组:
$user = Sentry::findUserById(1);
$adminGroup = Sentry::findGroupByName('Admin');
$isAdmin = $user->inGroup($adminGroup);
但是,最好的方法是使用权限。您可以设置具有“管理用户帐户”权限的“管理员”组。然后,只需检查用户是否具有“管理用户帐户”的权限,而不是检查它们是否属于管理组。
在我的“组”表中,有一行如下所示:
id |名称|权限
1 | Admin |{“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';
}
请注意,“用户”表通过“用户组”表连接到“组”表。
有关如何细化权限的更多信息,请参阅Sentry文档。它相当强大