Laravel: разрешения Sentry не работают должным образом

#php #laravel #laravel-4 #cartalyst-sentry

#php #laravel #laravel-4 #cartalyst-sentry

Вопрос:

В моем sentry seeder у меня есть следующее:

 <?php

use AppModelsUser;

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@admin.com",
            'first_name'  => 'Kamran',
            'last_name'   => 'Ahmed',
            'activated'   => 1,
        ));

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

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

        Sentry::getGroupProvider()->create(array(
            'name'        => 'Blogger',
            'permissions' => array(
                'blog.add' => 1,
                'blog.update' => 1,
                'blog.trash' => 1,
                'blog.remove' => 1
            ),
        ));

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

        $normalUser  = Sentry::getUserProvider()->findByLogin('user@user.com');
        $normalGroup = Sentry::getGroupProvider()->findByName('Blogger');

        $adminUser->addGroup($adminGroup);
    }

}
  

Как вы можете видеть, я определил две группы Admin и Blogger . Admin имеет все разрешения, определенные blog , в то время как blogger может только blog.add , blog.update , blog.trash и blog.remove . В моем представлении post у меня есть кнопка с именем, Delete Permanently для которой я использовал разрешение blog.remove . Я хочу показывать эту кнопку, только если Sentry::getUser()->hasAnyAccess(array('blog', 'blog.remove')) :

 @if (Sentry::getUser()->hasAnyAccess(array('blog', 'blog.remove')))
    <a class="btn btn-danger" href="{{URL::to('post/delete/' . $post->id)}}">Delete Permanently</a>
@endif
  

Теперь, когда я вхожу в систему с помощью admin@admin.com , все работает нормально, то есть кнопка удаления отображается как ожидалось, потому что у admin есть разрешение access to blog . Но, когда я вхожу в систему с помощью user@user.com , кнопка не отображается. В чем причина того, что кнопка не отображается, хотя я назначил разрешение blog.remove на user@user.com . Также я сделал var_dump(..) и это возвращает false . Кто-нибудь, пожалуйста, может сказать мне, что не так с моей реализацией? Почему для user@user.com пользователя не отображается кнопка удаления?

Комментарии:

1. глядя на ваш сеялку, вы добавляете пользователя только в группу администраторов, а не в группу blogger.

Ответ №1:

В вашем сеялке вы не назначаете пользователя в blogger группу.

 $normalUser->addGroup($normalGroup);