2015-03-05 2 views
1

Я создаю права пользователя на laravel. В моей БД у меня есть таблица с id/user_id/model/write/read/deleteпроверить права пользователя на выполнение чего-то

последние три разрешения перечислены типа: включено и выключено.

в моей модели Пользователь им написал метод установки:

protected $models = ['dashboard', 'preferences']; 

public function setPermissions($input=false)    
    { 
     foreach($this->models as $model) { 
      $read = (isset($input[$model]['read']) ? 'on' : 'off'); 
      $write = (isset($input[$model]['write']) ? 'on' : 'off'); 
      $delete = (isset($input[$model]['delete']) ? 'on' : 'off'); 

      $perms   = Permissions::firstOrNew([ 
       'user_id' => $this->id, 
       'model'  => $model, 
      ]); 

      $perms->read = $read; 
      $perms->write = $write; 
      $perms->delete = $delete; 
      $perms->save(); 
     } 
    } 

в разрешение модели им пишут:

use Illuminate\Database\Eloquent\SoftDeletingTrait; 

class Permissions extends Eloquent { 

    use SoftDeletingTrait; 

    protected $table = 'user_permissions'; 
    protected $fillable = ['user_id', 'model', 'read', 'write', 'delete']; 

    public function user() 
    { 
     return $this->belongsTo('User','user_id','id'); 
    } 

} 

ОК, у меня есть метод, как установить разрешение установки формы. Теперь мне нужно, чтобы проверить право, если пользователь имеет разрешение на запись или чтение, удаление и сделать somehting так:

if (Auth::user->hasRights('write', 'delete')) 
      //do something 

Пожалуйста, помогите мне, как выбрать из разрешений БД и проверить права пользователя с помощью метода hasRight.

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

и, может быть, у вас есть крошечный код моего метода setPermission? thank u

ответ

0
// in User model 
public function hasRights(...$accessLevels) 
{ 
    return ! $this->permissions()->filter(function (Permissions $p) use ($accessLevels) { 
     foreach ($accessLevels as $access) { 
      if (! $p->{$access}) return false; 
     } 
     return true; 
    })->isEmpty(); 
} 
Смежные вопросы