如何:使用Laravel 4实现sentry 2权限?

Ray*_*Ray 24 laravel laravel-4 cartalyst-sentry

我正在尝试使用laravel 4在我的网站中使用cartalyst哨兵2.基本上我不明白如何实现权限.

我见过的关于组权限的示例指定以下示例:

{
    "name" : "Administrator",
    "permissions" : 
    {
        "user.create" : 1,
        "user.delete" : 1,
        "user.view"   : 1,
        "user.update" : 1
    }
}
Run Code Online (Sandbox Code Playgroud)

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

在表'groups'中有一个称为权限的字段,它是一个文本字段 - 它们是否设置在那里 - 如果是这样的话?或者这些设置在模型或控制器中?

任何人都可以指出我如何在laravel 4应用程序中使用?我已经阅读了支持文档的功能,但我不知道如何设置数据以使函数工作.

Ant*_*iro 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,
    ],
]);
Run Code Online (Sandbox Code Playgroud)

将组设置为特定用户,在这种情况下,它将Managers设置为当前登录用户

Sentry::getUser()->addGroup( Sentry::getGroupProvider()->findByName('Managers') );
Run Code Online (Sandbox Code Playgroud)

检查用户是否具有特定访问权限

if ( Sentry::getUser()->hasAnyAccess(['system','system.products']) )
{
    // Will be able to do a thing
}
Run Code Online (Sandbox Code Playgroud)

检查用户是否是超级管理员(仅此组具有"系统"访问权限)

if ( Sentry::getUser()->hasAnyAccess(['system']) )
{
    // Will be able to do a thing
}
Run Code Online (Sandbox Code Playgroud)

获取特定用户的所有组

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.';
}
Run Code Online (Sandbox Code Playgroud)

  • 你在谈论`system`,`system.products` ......?他们和你的班级之间没有任何关系,这些只是你选择的名字.我试图像`system.products.insert`一样使用它们,如果你有`system.products`,你可以在产品上做所有事情. (2认同)