Laravel 4 - 认证教程

tin*_*ook 6 laravel laravel-4 cartalyst-sentry

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

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

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

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

编辑

这就是我最终做的事情.

按照@Antonio Carlos Ribeiro指定的方式安装Sentry之后.

我有用户,和其他几个表(我只需要使用用户和组).

这是我最初用于创建用户和组的播种机.它可以提高效率,但对于任何想要开始使用的人来说都可以.

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

}

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

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

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

您可以在Sentry文档中找到它: Sentry Docs

随意编辑此问题以使其更具信息性或添加新示例.

Ant*_*iro 14

好吧,这不是一篇关于它的文章,但它涵盖了我们在Sentry2中使用auth和角色的大部分内容.所以,基本上你必须这样做

通过执行安装composer

curl -sS https://getcomposer.org/installer | php
Run Code Online (Sandbox Code Playgroud)

将它放在可执行文件夹上,重命名

sudo mv composer.phar /bin/composer
Run Code Online (Sandbox Code Playgroud)

设置可执行位

sudo chmod +x /bin/composer
Run Code Online (Sandbox Code Playgroud)

通过执行安装laravel

composer create-project laravel/laravel
Run Code Online (Sandbox Code Playgroud)

安装Sentry 2

composer require cartalyst/sentry:2.0.*
Run Code Online (Sandbox Code Playgroud)

然后你只需要使用Sentry:

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

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

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

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

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

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