Laravel Разрешение пользователя на доступ к определенным страницам?

Я создал страницы с пулями:

// Create pages table for dynamic pages id | slug | title | page_template 0 about about us about.blade 1 contact contact us contact.blade 

Я собираюсь получить к ним доступ через следующий маршрут:

  // could be page/{slug} or only slug inside routes.php Route::get('/{slug}', array('as' => 'page.show', 'uses' => 'PageController@show')); 

Где у меня есть PageController, так что это позволяет мне создавать страницы динамически. ссылаясь на решение здесь: Laravel Создание динамических маршрутов для контроллеров из базы данных Mysql

У меня также есть таблица ролей:

  // Create roles table for id | name 0 user 1 admin 

У меня также есть другая таблица для разрешения:

  // permission table role_id | page_id 0 0 0 1 1 1 

Это поможет мне настроить разрешение на тип ролей, так что, например, если вы являетесь пользователем, вы можете получить доступ только к странице, если вы являетесь администратором, вы можете получить доступ ко всем страницам и т. Д.

Мой вопрос: как я могу это сделать, добавлю фильтр на свой маршрут, который проверяет, может ли пользователь получить доступ к этой странице slug? Так я делаю это внутри routes.php или внутри filters.php? и как?

Спасибо за помощь

Вам нужна настройка, например, следующая. Создайте классы (модели) с четырьмя таблицами (пользователи, разрешения ролей и разрешение_роли):

roles таблицы:

 id | name (role name) 1 | admin 2 | user 

Role модели:

 class Role extends ELoquent { protected $table = 'roles'; public function users() { return $this->hasMany('User', 'role_id', 'id'); } public function permissions() { return $this->belongsToMany('Permission'); } } 

permissions таблицы:

 id | name (permission name) 1 | manage_pages (add/edit/delete) 2 | manage_users (add/edit/delete) 3 | page_about (access allowed to about page) 4 | page_contact (access allowed to contact page) 

Permission модели

 class Permission extends ELoquent { protected $table = 'permissions'; public function roles() { return $this->belongsToMany('Role'); } } 

users таблицы:

 id | username | email | password | role_id | more... 1 | admin | admin@ymail.com | hashed | 1 | more... 2 | user1 | user1@ymail.com | hashed | 2 | more... 3 | user2 | user2@ymail.com | hashed | 2 | more... 

User модели

 class User extends ELoquent { protected $table = 'users'; public function role() { return $this->belongsTo('Role', 'role_id', 'id'); } public function can($perm = null) { if(is_null($perm)) return false; $perms = $this->role->permissions->fetch('name'); return in_array($perm, $perms->toArray()); } } 

Таблица permission_role (сводная таблица):

 id | permission_id | role_id 1 | 1 | 1 2 | 2 | 1 3 | 3 | 1 4 | 4 | 1 5 | 3 | 2 6 | 4 | 2 

После того, как у вас есть эта настройка, вы можете создавать фильтры или в своем методе класса, вы можете проверить, имеет ли зарегистрированный пользователь определенное правило или разрешение, а затем разрешить доступ к странице, иначе это не разрешено. Например, вы можете проверить, может ли зарегистрированный пользователь получить доступ к странице, используя что-то вроде этого:

 if(Auth::user->can('manage_pages')) { // Let him/her to add/edit/delete any page } 

Поскольку ваши страницы являются динамическими, и все страницы отображаются методом show тогда в вашем методе show вы можете проверить что-то вроде этого:

 public function show($slug = 'home') { // assumed page skug is 'about' $permission = 'page_' . $slug; if(Auth::user->can($permission)) { $page = page::whereSlug('home')->get(); return View::make('pages.index')->with('page', $page); } } 

Это действительно большая проблема, и вы должны понять это сами. Я дал вам основную идею с некоторыми реализациями, теперь вы должны расширить ее.


P / S: невозможно ответить на все с нуля, но я связан с другим ответом этого же проекта, и я предложил вам создать базу разрешений (ACL), чтобы я попытался помочь, но вам нужно попытаться реализовать остальные. Всего наилучшего.