首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 4教程-认证

Laravel 4教程-认证
EN

Stack Overflow用户
提问于 2013-06-19 19:28:25
回答 1查看 9.2K关注 0票数 6

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

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

这就是我想要做的。-这是一个内部工作网站。作者可以在那里注册并提交文章。-管理员可以翻阅那些文章。-这些文章不是公开的,所以没有人可以看。-作家不能互相看文章,但管理员可以查阅一切。

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

编辑

这就是我最后要做的。

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

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

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

代码语言:javascript
运行
复制
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);
}

}

在添加初始用户之后,我使用了一个表单来添加新用户,因此在我的控制器中有这样的内容。同样,这只是为了学习/测试框架,原来的实现是非常不同的。但是为了测试的目的,这应该是可行的。

假设您有一个提交给控制器@函数的表单,您可以拥有这样的内容,

代码语言:javascript
运行
复制
$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);

Rest您可以在Sentry文档中找到:哨兵

请随意编辑这个问题,以使它更有信息或添加新的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-19 20:00:44

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

通过执行

代码语言:javascript
运行
复制
curl -sS https://getcomposer.org/installer | php

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

代码语言:javascript
运行
复制
sudo mv composer.phar /bin/composer

设置可执行位

代码语言:javascript
运行
复制
sudo chmod +x /bin/composer

通过执行

代码语言:javascript
运行
复制
composer create-project laravel/laravel

安装Sentry 2

代码语言:javascript
运行
复制
composer require cartalyst/sentry:2.0.*

那么你只需要使用Sentry:

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

代码语言:javascript
运行
复制
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,
    ),
));

将组设置为特定用户,在本例中是将管理器设置为当前日志记录的用户。

代码语言:javascript
运行
复制
Sentry::getUser()->addGroup( Sentry::getGroupProvider()->findByName('Author') );

检查用户是否可以发布和添加项目

代码语言:javascript
运行
复制
if ( Sentry::getUser()->hasAnyAccess(['system','system.articles','system.articles.publish']) )
{
    // will be able to publish something
}

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

代码语言:javascript
运行
复制
if ( Sentry::getUser()->hasAnyAccess(['system']) )
{
    // will be able to do a thing
}

从特定用户获取所有组

代码语言:javascript
运行
复制
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.';
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17199698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档