24

我正在尝试在使用 Laravel 4 构建的网站中使用 cartalyst sentry 2。基本上我不明白如何实现权限。

我看到的组权限示例指定以下示例:

{
    "name" : "Administrator",
    "permissions" : 
    {
        "user.create" : 1,
        "user.delete" : 1,
        "user.view"   : 1,
        "user.update" : 1
    }
}

所以这是为管理员组设置权限。但是这些权限在哪里设置?

在“组”表中有一个名为权限的字段,它是一个文本字段-它们是否设置在那里-如果是这样,如何设置?还是这些设置在模型或控制器中?

谁能一步一步告诉我如何在 laravel 4 应用程序中使用?我已经阅读了支持这些功能的文档,但我只是不确定如何设置数据以使功能正常工作。

4

2 回答 2

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.';
}
于 2013-06-09T18:15:24.127 回答
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";
}
于 2013-06-09T18:08:30.843 回答