【问题标题】:Cartalyst Sentinel Laravel - How do you create roles?Cartalyst Sentinel Laravel - 你如何创建角色?
【发布时间】:2014-11-07 01:30:01
【问题描述】:

我不熟悉 Cartalyst Sentinel 和 ACL 的这个概念。我已经成功地创建了一个用户、执行激活以及登录和注销。

我想把我的学习提升到一个新的水平。我想在这个 laravel 应用程序上有 2 种类型的用户。 1 是管理员另一个是订阅者。我假设我的帐户创建方法应该默认为用户创建订阅者。

public function postCreate() {

        /* Validation */
        $validation = Validator::make(Input::all(), [
            'email' => 'required|email|max:50|unique:users',
            'username' => 'required|min:3|max:20|unique:users',
            'password' => 'required|min:6',
            'password_repeat' => 'required|same:password',
        ]);

        if ($validation->fails()) {

            return Redirect('login')->withErrors($validation)->withInput();

        } else {

            $credentials = Input::all();
            $user = Sentinel::register($credentials);

            $activation = Activation::create($user);

            $activation_code = $activation->code;

            if ($user) {

                Mail::send('emails.auth.activate', ['link' => URL::route('account-activate', [$user->id, $activation_code]), 'username' => $user->username], function($message) use ($user) {

                    $message->to($user->email, $user->username)->subject('Activate your account');

                });

                return Redirect::route('home')->with('global', 'Thank you for registering! We have sent you an email to activate your account');

            }

        }       

    }

我会这样修改代码吗

$user = Sentinel::register($credentials);

$user = Sentinel::findById(1);

$role = Sentinel::findRoleByName('Subscribers');

$role->users()->attach($user);

问题是我什至还没有创建任何角色。我们在哪里编写该功能?现在我有以下控制器

  1. AccountController - 处理激活
  2. AuthController - 处理登录/注销
  3. RegistrationController - 处理用户注册
  4. RolesController - 我还没有在里面写任何东西。我有点失落。

请指导我。非常感谢任何帮助。

【问题讨论】:

  • 我也有同样的问题。非常感谢任何帮助。

标签: laravel-4 acl sentinel


【解决方案1】:

如果您已经注册了用户,则无需搜索用户,注册方法会返回用户。 您可以执行以下操作以将角色附加到用户:

$user = Sentinel::register($credentials);
$role = Sentinel::findRoleByName('Subscribers');
$role->users()->attach($user);
// OR
$user->roles()->attach($role); 

你有一个用户和一个角色对象,它们有一个多对多的关系,所以你使用哪一个并不重要。

您需要创建一个数据库播种器或一个方法来创建您的权限。但要创建您的订阅者角色,您需要执行以下操作:

Sentinel::getRoleRepository()->createModel()->create([
    'name' => 'Subscribers',
    'slug' => 'subscribers',
    'permissions' => [
       'user.view'   => true,
       'user.delete' => false,
       // any other permissions you want your Subscribers to have
    ]
]);

类似的调用也可以建立您的管理员角色。

您的角色模型和控制器已经为您构建好了,您只需通过 Sentinel 访问它们,您已经调用了 Sentinel::findRoleByName('Subscribers');

Cartalyst 有一些关于为您的用户设置角色和权限的相当不错的文档:

这只是弄清楚您希望每个角色做什么或不做什么的问题。 此外,您可以为每个用户设置特定权限以覆盖角色权限。

【讨论】:

  • 我有一个问题,user.viewuser.delete中的user是什么意思,是型号名称还是什么,.?
  • 那些指的是您在检查权限时引用的实际权限名称,所以权限名称 user.view => true 只是意味着在您的代码中稍后您将调用 if ($user->hasAccess(['user.view'])) 并且说,这个当前用户有权查看被叫用户。
  • 是的,我知道了,只有命名约定供以后检查权限。谢谢@codivist。
  • @codivist :我看到问题是关于“你如何在 Sentinel 中创建角色?”但我在你的回答中找不到。是的,它当然在链接中。我被更新和删除角色卡住了,你能指导我怎么做吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2018-12-11
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多