2014-01-27 2 views
1

Я создаю свой проект с использованием Laravel 4.1 с Sentry 2 в качестве пакета авторизации и аутентификации.
Мне удалось зарегистрировать пользователей, зарегистрировать их и назначить соответствующие группы пользователей.
У меня есть 3 группы пользователей:Laravel 4.1 - Sentry 2 Доступ/разрешение группы пользователей

  • Администратор
  • Presenter
  • Registered

Я хочу добиться 2 вещи:

  1. Администраторы и предъявителей может иметь доступ к панели администрирования. Пользователи нет.
  2. Ограничить представление в панели администрирования для докладчиков. Я хочу, чтобы они видели только несколько просмотров (ссылок), например, только График.

Я никогда не использовал роли раньше, и это первый раз, когда я использую Sentry 2. Вот почему я хотел бы попросить о помощи. Какой-то момент, как начать. Как я могу достичь обоих?

ответ

1

Определить разрешение для всех групп.

проверить этот учебник https://cartalyst.com/manual/sentry/users/helpers

и сосредоточиться на hasAccess($permission) и hasAnyAccess($permissions)

+0

Я думал о 'HasAccess()' и 'hasAnyAccess()', но я думаю, что это слишком много кода для простого проекта шахты. Я думал о чем-то вроде **, если пользователь находится в группе Admin, чем ... что-то делать **. – SONGE

+0

Я не нашел другого пути. Я использую тот же длительный процесс. Примените фильтр в routes.php и навигации для текущего пользователя. Если вы найдете какой-либо простой способ, пожалуйста, отправьте сообщение. –

4

Для более общих проверок разрешения я хотел бы посмотреть на inGroup() помощника:

// Find the user using the user id 
$user = Sentry::findUserByID(1); 

// Find the Administrator group 
$admin = Sentry::findGroupByName('Administrator'); 

// Check if the user is in the administrator group 
if ($user->inGroup($admin)) { 
    // User is in Administrator group 
} else { 
    // User is not in Administrator group 
} 
0

в filter.php

/** 
* hasAcces filter (permissions) 
* 
* Check if the user has permission (group/user) 
*/ 
Route::filter('hasAccess', function($route, $request, $value) 
{ 
    try { 
     $user = Sentry::getUser(); 
     if(! $user->hasAccess($value)) { 
      if(Sentry::check()) 
       return Redirect::to('portal')->with('message', 'No Access.'); 
      else 
       return Redirect::to('registration#login')->with('message', 'No Access.'); 
     } 
    } catch (Cartalyst\Sentry\Users\UserNotFoundException $e) { 
     if(Sentry::check()) 
      return Redirect::to('portal')->with('message', 'User not found.'); 
     else 
      return Redirect::to('registration#login')->with('message', 'User not found.'); 
    } 
}); 

/** 
* InGroup filter 
* 
* Check if the user belongs to a group 
*/ 
Route::filter('inGroup', function($route, $request, $value) { 
    try { 
     $user = Sentry::getUser(); 
     $group = Sentry::findGroupByName($value); 
     if(! $user->inGroup($group)) { 
      if(Sentry::check()) 
       return Redirect::to('portal')->with('message', 'No Access.'); 
      else 
       return Redirect::to('registration#login')->with('message', 'No Access.'); 
     } 
    } catch (Cartalyst\Sentry\Users\UserNotFoundException $e) { 
     if(Sentry::check()) 
      return Redirect::to('portal')->with('message', 'User not found.'); 
     else 
      return Redirect::to('registration#login')->with('message', 'User not found.'); 
    } catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e) { 
     if(Sentry::check()) 
      return Redirect::to('portal')->with('message', 'Group not found.'); 
     else 
      return Redirect::to('registration#login')->with('message', 'Group not found.'); 
    } 
}); 

Маршруты ->

Route::group(array('before' => 'Sentry|inGroup:Administrators'), function() { 
    Route::get('manageusers', array('as' => 'manageusers', 'uses' => '[email protected]')); 
});