6

我环顾四周,发现了一些关于使用or和进行Laravel 4 身份验证的教程。这对我来说很好但有点模糊,我是初学者,这是我的第一个框架。SentryConfideEntrustLaravel

有谁知道使用用户角色实现用户身份验证的任何教程或建议。

这是我想要做的。- 它是一个内部工作网站。作者可以登录并提交文章的地方。- 管理员可以浏览这些文章。- 这些文章不公开,因此没有人可以查看它们。- 作家不能看到彼此的文章,但管理员可以访问所有内容。

我只是在寻找有关用户角色以及如何实现它们的教程。

编辑

这就是我最终做的。

以@Antonio Carlos Ribeiro指定的方式安装 Sentry 之后。

我有UsersGroups和其他几张表(我只需要使用 user 和 groups)。

这是我最初用于创建用户和组的播种机。它可以变得更有效率,但对于任何想要开始的人来说,这都是可行的。

class SentrySeeder extends Seeder {

public function run()
{
    DB::table('users')->delete();
    DB::table('groups')->delete();
    DB::table('users_groups')->delete();

    Sentry::getUserProvider()->create(array(
        'email'       => 'admin@admin.com',
        'password'    => "admin",
        'first_name'  => 'John',
        'last_name'   => 'McClane',
        'activated'   => 1,
    ));

    Sentry::getUserProvider()->create(array(
        'email'       => 'user@user.com',
        'password'    => "user",
        'first_name'  => 'Saad',
        'last_name'   => 'Kabir',
        'activated'   => 1,
    ));

    Sentry::getUserProvider()->create(array(
        'email'       => 'jack@user.com',
        'password'    => "user",
        'first_name'  => 'Jack',
        'last_name'   => 'Doe',
        'activated'   => 1,
    ));

    Sentry::getUserProvider()->create(array(
        'email'       => 'jon@user.com',
        'password'    => "user",
        'first_name'  => 'Jon',
        'last_name'   => 'Doe',
        'activated'   => 1,
    ));

    Sentry::getGroupProvider()->create(array(
        'name'        => 'Admin',
        'permissions' => array('admin' => 1),
    ));

    Sentry::getGroupProvider()->create(array(
        'name'        => 'Writer',
        'permissions' => array('writer' => 1),
    ));



    // Assign user permissions
    $adminUser  = Sentry::getUserProvider()->findByLogin('admin@admin.com');
    $adminGroup = Sentry::getGroupProvider()->findByName('Admin');
    $adminUser->addGroup($adminGroup);


    $userUser  = Sentry::getUserProvider()->findByLogin('user@user.com');
    $userGroup = Sentry::getGroupProvider()->findByName('Writer');
    $userUser->addGroup($userGroup);

    $userUser  = Sentry::getUserProvider()->findByLogin('jack@user.com');
    $userGroup = Sentry::getGroupProvider()->findByName('Writer');
    $userUser->addGroup($userGroup);

    $userUser  = Sentry::getUserProvider()->findByLogin('jon@user.com');
    $userGroup = Sentry::getGroupProvider()->findByName('Writer');
    $userUser->addGroup($userGroup);
}

}

添加初始用户后,我使用表单添加新用户,所以在我的控制器中我有这样的东西。同样,这仅用于学习/测试框架,原始实现非常不同。但出于测试目的,这应该有效。

假设你有一个提交给控制器@函数的表单,你可以有这样的东西,

$user = Sentry::getUserProvider()->create(array(
            'email'       => Input::get('email'),
            'password'    => Input::get('password'),
            'first_name'  => Input::get('first_name'),
            'last_name'   => Input::get('last_name'),
            'activated'   => 1,
        ));

        $writerGroup = Sentry::getGroupProvider()->findByName('writer');

        $user->addGroup($writerGroup);

你可以在 Sentry 文档中找到休息: Sentry Docs

随意编辑此问题以使其提供更多信息或添加新示例。

4

1 回答 1

13

好吧,这并不完全是一篇关于它的文章,但它涵盖了我们在 Sentry2 中的身份验证和角色中使用的大部分内容。所以,基本上你必须

通过执行安装作曲家

curl -sS https://getcomposer.org/installer | php

把它放在一个可执行文件夹中,重命名它

sudo mv composer.phar /bin/composer

设置可执行位

sudo chmod +x /bin/composer

通过执行安装 laravel

composer create-project laravel/laravel

安装哨兵 2

composer require cartalyst/sentry:2.0.*

然后你只需要使用哨兵:

为每个组创建用户组和权限:

Sentry::getGroupProvider()->create(array(
    'name'        => 'Super Administrators',
    'permissions' => array(
            'system' => 1,
    ),
));

Sentry::getGroupProvider()->create(array(
    'name'        => 'Managers',
    'permissions' => array(
        'system.articles' => 1,
    ),
));

Sentry::getGroupProvider()->create(array(
    'name'        => 'Publishers',
    'permissions' => array(
        'system.articles.add' => 1,
        'system.articles.edit' => 1,
        'system.articles.delete' => 1,
        'system.articles.publish' => 1,
    ),
));

Sentry::getGroupProvider()->create(array(
    'name'        => 'Authors',
    'permissions' => array(
        'system.articles.add' => 1,
        'system.articles.edit' => 1,
        'system.articles.delete' => 1,
    ),
));

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

Sentry::getUser()->addGroup( Sentry::getGroupProvider()->findByName('Author') );

检查用户是否可以发布和添加文章

if ( Sentry::getUser()->hasAnyAccess(['system','system.articles','system.articles.publish']) )
{
    // will be able to publish something
}

检查用户是否是超级管理员(只有该组具有“系统”访问权限)

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-19T20:00:44.697 回答