我正在尝试使用Laravel 4在我的网站中使用cartalyst哨兵2.基本上我不明白如何实现权限。
我见过的关于组权限的示例指定以下示例:
{
"name" : "Administrator",
"permissions" :
{
"user.create" : 1,
"user.delete" : 1,
"user.view" : 1,
"user.update" : 1
}
}
这是为管理员组设置权限。但是这些权限设置在哪里?
在表'groups'中有一个名为permissions的字段,它是一个文本字段 - 它们是否设置在那里 - 如果是这样的话?或者这些设置在模型或控制器中?
有人能指出我如何在laravel 4应用程序中使用吗?我已经阅读了支持文档,这些文档通过函数来解决,但我只是不确定如何设置数据以使函数工作。
答案 0 :(得分:52)
基本上你必须......
创建论坛
Sentry::getGroupProvider()->create([
'name' => 'Super Administrators',
'permissions' => [
'system' => 1,
],
]);
Sentry::getGroupProvider()->create([
'name' => 'Managers',
'permissions' => [
'system.products' => 1,
'system.store' => 1,
'system.profile' => 1,
],
]);
将组设置为特定用户,在这种情况下,它将Managers设置为当前登录用户
Sentry::getUser()->addGroup( Sentry::getGroupProvider()->findByName('Managers') );
检查用户是否具有特定访问权限
if ( Sentry::getUser()->hasAnyAccess(['system','system.products']) )
{
// Will be able to do a thing
}
检查用户是否为超级管理员(仅此组具有“系统”访问权限)
if ( Sentry::getUser()->hasAnyAccess(['system']) )
{
// Will be able to do a thing
}
获取特定用户的所有群组
try
{
// Find the user using the user id
$user = Sentry::getUserProvider()->findById(1);
// Get the user groups
$groups = $user->getGroups();
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
echo 'User was not found.';
}
答案 1 :(得分:4)
在groups
表中,您使用JSON设置权限。
我有以下专栏:
id | name | permissions
还有一行:
1 | admin | {"admin":1, "create_news": 1}
使用表users_groups
现在,您可以使用以下示例来检查用户是否具有给定权限:
$user = Sentry::getUser();
if ($user->hasAccess('create_news')) {
echo "You can create a news item";
}
else {
echo "You can't create a news item";
}