2015-07-11 2 views
0

Я использую Entrust в Laravel 5.1. С их апи, я могу видеть, что я могу проверить права доступа пользователей, как это: $user->can('edit_posts'), Но я хочу, чтобы иметь возможность проверять разрешение для определенной роли, как это: $role->can('edit_posts'), , которая возвращает Правда или ложныхEntrust - получить разрешение на основании роли

Вышеуказанное не работает. Разве это невозможно? Какой правильный метод проверить, имеет ли роль manager, имеет право на edit_post?

ответ

1

Это то, что я сделал сейчас, хотя я не уверен, что его правильный обычный метод следует, но он работает.

Что я сделал, была создана статическая функция внутри модели Role(), которая проверяет role_id на permission и возвращает true или false. Вот код:

namespace App\Models; 
use Zizaco\Entrust\EntrustRole; 
use DB; 

class Role extends EntrustRole { 

     /** 
     * Checks if the role has a permission by its name. 
     * 
     * @param numeric $roleId|string $permissionName - Role ID and permission name. 
     * 
     * @return bool 
     */ 
     public static function hasPermission($roleId, $permissionName) 
     { 
       $role = Role::findOrFail($roleId); 
       $role_permissions = $role->perms()->get(); 
        foreach ($role_permissions as $permission) { 
         if ($permission->name == $permissionName) { 
          return true; 
         } 
        } 
       return false; 
     } 
} 

Использование в контроллере:

$hasPermission = Role::hasPermission($roleId, 'edit_post'); 
Смежные вопросы