added middleware to authenticate access to admin and mod views, plus seperated a few controllers

This commit is contained in:
mwalbeck 2016-10-25 20:30:05 +02:00
parent 6b8526971b
commit 66bf4390a1
10 changed files with 241 additions and 144 deletions

View file

@ -13,7 +13,7 @@ class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware(['auth', 'is.admin']);
}
public function index()

View file

@ -0,0 +1,121 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests;
use App\Test;
use App\Question;
use App\Option;
use App\Group;
use App\Http\Requests\StoreTest;
use App\Http\Requests\StoreQuestion;
class AdministrativeTestController extends Controller
{
public function __construct()
{
$this->middleware(['auth', 'is.admin.mod']);
}
/**
*
* Common controller functions between moderators and administrators for handling tests and associated questions
*
*/
public function addTest(StoreTest $request)
{
$test = new Test();
$test->createTest($request->all());
return redirect("/admin/tests/$test->id");
}
public function confirmDeleteTest(Test $test)
{
return view('tests.delete', compact('test'));
}
public function confirmDeleteQuestion(Question $question)
{
return view('tests.question.delete', compact('question'));
}
public function deleteQuestion(Question $question)
{
$test = $question->test;
$question->deleteQuestion();
return redirect("/admin/tests/$test->id");
}
public function deleteTest(Test $test)
{
$test->deleteTest();
return redirect('/admin/tests');
}
public function editQuestion(Question $question)
{
$options = $question->options;
return view('tests.question.edit', compact('question'), compact('options'));
}
public function newQuestion(Test $test)
{
$question_number = $test->nextQuestionNumber();
return view('tests.question.new', compact('test'), compact('question_number'));
}
public function updateTest(Test $test, StoreTest $request)
{
$test->updateTest($request->all());
return redirect("/admin/tests/$test->id");
}
public function showTest(Test $test)
{
$questions = $test->questions;
return view('tests.show', compact('test'), compact('questions'));
}
public function newTest()
{
if (Auth::user()->isAdministrator()) {
$groups = Group::all();
return view('tests.new', compact('groups'));
}
return view('tests.new');
}
public function editTest(Test $test)
{
if (Auth::user()->isAdministrator()) {
$groups = Group::all();
return view('tests.edit', compact('test'), compact('groups'));
}
return view('tests.edit', compact('test'));
}
public function addQuestion(Test $test, StoreQuestion $request)
{
$question = new Question;
$question->addQuestion($test, $request);
foreach ($request["options"] as $optionData) {
$option = new Option;
$option->addOption($question, $optionData);
}
return redirect("/admin/tests/$test->id");
}
public function updateQuestion(Question $question, StoreQuestion $request)
{
$test = $question->test;
$question->updateQuestion($request);
$options = $question->options;
$optionsData = $request["options"];
foreach ($options as $key => $option) {
$option->updateOption($optionsData[$key+1]);
}
return redirect("/admin/tests/$test->id");
}
}

View file

@ -9,11 +9,11 @@ use App\Http\Requests\StoreUser;
use App\User;
use App\Group;
class UserController extends Controller
class AdministrativeUserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware(['auth', 'is.admin.mod']);
}
/**

View file

@ -10,7 +10,7 @@ class ModeratorController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware(['auth', 'is.mod']);
}
public function index()

View file

@ -15,6 +15,11 @@ use App\Http\Requests\StoreQuestion;
class TestController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function startTest(Test $test)
{
if (null !== session("start_time") && session("time_limit") !== 0 && session("start_time")+session("time_limit") > time()) {
@ -123,106 +128,4 @@ class TestController extends Controller
$test->sessionPurge();
return redirect("/home");
}
/**
*
* Common controller functions between moderators and administrators for handling tests and associated questions
*
*/
public function addTest(StoreTest $request)
{
$test = new Test();
$test->createTest($request->all());
return redirect("/admin/tests/$test->id");
}
public function confirmDeleteTest(Test $test)
{
return view('tests.delete', compact('test'));
}
public function confirmDeleteQuestion(Question $question)
{
return view('tests.question.delete', compact('question'));
}
public function deleteQuestion(Question $question)
{
$test = $question->test;
$question->deleteQuestion();
return redirect("/admin/tests/$test->id");
}
public function deleteTest(Test $test)
{
$test->deleteTest();
return redirect('/admin/tests');
}
public function editQuestion(Question $question)
{
$options = $question->options;
return view('tests.question.edit', compact('question'), compact('options'));
}
public function newQuestion(Test $test)
{
$question_number = $test->nextQuestionNumber();
return view('tests.question.new', compact('test'), compact('question_number'));
}
public function updateTest(Test $test, StoreTest $request)
{
$test->updateTest($request->all());
return redirect("/admin/tests/$test->id");
}
public function showTest(Test $test)
{
$questions = $test->questions;
return view('tests.show', compact('test'), compact('questions'));
}
public function newTest()
{
if (Auth::user()->isAdministrator()) {
$groups = Group::all();
return view('tests.new', compact('groups'));
}
return view('tests.new');
}
public function editTest(Test $test)
{
if (Auth::user()->isAdministrator()) {
$groups = Group::all();
return view('tests.edit', compact('test'), compact('groups'));
}
return view('tests.edit', compact('test'));
}
public function addQuestion(Test $test, StoreQuestion $request)
{
$question = new Question;
$question->addQuestion($test, $request);
foreach ($request["options"] as $optionData) {
$option = new Option;
$option->addOption($question, $optionData);
}
return redirect("/admin/tests/$test->id");
}
public function updateQuestion(Question $question, StoreQuestion $request)
{
$test = $question->test;
$question->updateQuestion($request);
$options = $question->options;
$optionsData = $request["options"];
foreach ($options as $key => $option) {
$option->updateOption($optionsData[$key+1]);
}
return redirect("/admin/tests/$test->id");
}
}

View file

@ -52,5 +52,8 @@ class Kernel extends HttpKernel
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'is.admin.mod' => \App\Http\Middleware\IsAdminOrMod::class,
'is.admin' => \App\Http\Middleware\IsAdministrator::class,
'is.mod' => \App\Http\Middleware\IsModerator::class,
];
}

View file

@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class IsAdminOrMod
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->isAdministrator() || Auth::user()->isModerator()) {
return $next($request);
}
return redirect("/home");
}
}

View file

@ -0,0 +1,23 @@
<?php
namespace App\Http\Middleware;
use Closure;
class IsAdministrator
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->isAdministrator()) {
return $next($request);
}
return redirect("/home");
}
}

View file

@ -0,0 +1,23 @@
<?php
namespace App\Http\Middleware;
use Closure;
class IsModerator
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->isModerator()) {
return $next($request);
}
return redirect("/home");
}
}

View file

@ -40,28 +40,28 @@ Route::group(['prefix' => 'mod'], function () {
Route::get('/', 'ModeratorController@index');
Route::get('/tests', 'ModeratorController@showTests');
Route::get('/tests/new', 'TestController@newTest');
Route::post('/tests/new', 'TestController@addTest');
Route::get('/tests/{test}', 'TestController@showTest');
Route::get('/tests/{test}/edit', 'TestController@editTest');
Route::patch('/tests/{test}/edit', 'TestController@updateTest');
Route::get('/tests/{test}/delete', 'TestController@confirmDeleteTest');
Route::delete('/tests/{test}/delete', 'TestController@deleteTest');
Route::get('/tests/{test}/question', 'TestController@newQuestion');
Route::post('/tests/{test}/question', 'TestController@addQuestion');
Route::get('/questions/{question}/edit', 'TestController@editQuestion');
Route::patch('/questions/{question}', 'TestController@updateQuestion');
Route::get('/questions/{question}/delete', 'TestController@confirmDeleteQuestion');
Route::delete('/questions/{question}/', 'TestController@deleteQuestion');
Route::get('/tests/new', 'AdministrativeTestController@newTest');
Route::post('/tests/new', 'AdministrativeTestController@addTest');
Route::get('/tests/{test}', 'AdministrativeTestController@showTest');
Route::get('/tests/{test}/edit', 'AdministrativeTestController@editTest');
Route::patch('/tests/{test}/edit', 'AdministrativeTestController@updateTest');
Route::get('/tests/{test}/delete', 'AdministrativeTestController@confirmDeleteTest');
Route::delete('/tests/{test}/delete', 'AdministrativeTestController@deleteTest');
Route::get('/tests/{test}/question', 'AdministrativeTestController@newQuestion');
Route::post('/tests/{test}/question', 'AdministrativeTestController@addQuestion');
Route::get('/questions/{question}/edit', 'AdministrativeTestController@editQuestion');
Route::patch('/questions/{question}', 'AdministrativeTestController@updateQuestion');
Route::get('/questions/{question}/delete', 'AdministrativeTestController@confirmDeleteQuestion');
Route::delete('/questions/{question}/', 'AdministrativeTestController@deleteQuestion');
Route::get('/users', 'ModeratorController@showUsers');
Route::get('/users/new', 'UserController@newUser');
Route::post('/users/new', 'UserController@addUser');
Route::get('/users/{user}/edit', 'UserController@editUser');
Route::post('/users/{user}/edit', 'UserController@updateUser');
Route::get('/users/{user}/delete', 'UserController@confirmDeleteUser');
Route::delete('/users/{user}', 'UserController@deleteUser');
Route::get('/users/new', 'AdministrativeUserController@newUser');
Route::post('/users/new', 'AdministrativeUserController@addUser');
Route::get('/users/{user}/edit', 'AdministrativeUserController@editUser');
Route::post('/users/{user}/edit', 'AdministrativeUserController@updateUser');
Route::get('/users/{user}/delete', 'AdministrativeUserController@confirmDeleteUser');
Route::delete('/users/{user}', 'AdministrativeUserController@deleteUser');
});
/*---------- Routes for the administrator section ----------*/
@ -73,29 +73,29 @@ Route::group(['prefix' => 'admin'], function () {
Route::get('/tests', 'AdminController@showGroups');
Route::get('/tests/all', 'AdminController@showAllTests');
Route::get('/tests/group/{group}', 'AdminController@showGroupTests');
Route::get('/tests/new', 'TestController@newTest');
Route::post('/tests/new', 'TestController@addTest');
Route::get('/tests/{test}', 'TestController@showTest');
Route::get('/tests/{test}/edit', 'TestController@editTest');
Route::patch('/tests/{test}/edit', 'TestController@updateTest');
Route::get('/tests/{test}/delete', 'TestController@confirmDeleteTest');
Route::delete('/tests/{test}/delete', 'TestController@deleteTest');
Route::get('/tests/{test}/question', 'TestController@newQuestion');
Route::post('/tests/{test}/question', 'TestController@addQuestion');
Route::get('/questions/{question}/edit', 'TestController@editQuestion');
Route::patch('/questions/{question}', 'TestController@updateQuestion');
Route::get('/questions/{question}/delete', 'TestController@confirmDeleteQuestion');
Route::delete('/questions/{question}/', 'TestController@deleteQuestion');
Route::get('/tests/new', 'AdministrativeTestController@newTest');
Route::post('/tests/new', 'AdministrativeTestController@addTest');
Route::get('/tests/{test}', 'AdministrativeTestController@showTest');
Route::get('/tests/{test}/edit', 'AdministrativeTestController@editTest');
Route::patch('/tests/{test}/edit', 'AdministrativeTestController@updateTest');
Route::get('/tests/{test}/delete', 'AdministrativeTestController@confirmDeleteTest');
Route::delete('/tests/{test}/delete', 'AdministrativeTestController@deleteTest');
Route::get('/tests/{test}/question', 'AdministrativeTestController@newQuestion');
Route::post('/tests/{test}/question', 'AdministrativeTestController@addQuestion');
Route::get('/questions/{question}/edit', 'AdministrativeTestController@editQuestion');
Route::patch('/questions/{question}', 'AdministrativeTestController@updateQuestion');
Route::get('/questions/{question}/delete', 'AdministrativeTestController@confirmDeleteQuestion');
Route::delete('/questions/{question}/', 'AdministrativeTestController@deleteQuestion');
Route::get('/users', 'AdminController@showGroups');
Route::get('/users/all', 'AdminController@showAllUsers');
Route::get('/users/group/{group}', 'AdminController@showGroupUsers');
Route::get('/users/new', 'UserController@newUser');
Route::post('/users/new', 'UserController@addUser');
Route::get('/users/{user}/edit', 'UserController@editUser');
Route::post('/users/{user}/edit', 'UserController@updateUser');
Route::get('/users/{user}/delete', 'UserController@confirmDeleteUser');
Route::delete('/users/{user}', 'UserController@deleteUser');
Route::get('/users/new', 'AdministrativeUserController@newUser');
Route::post('/users/new', 'AdministrativeUserController@addUser');
Route::get('/users/{user}/edit', 'AdministrativeUserController@editUser');
Route::post('/users/{user}/edit', 'AdministrativeUserController@updateUser');
Route::get('/users/{user}/delete', 'AdministrativeUserController@confirmDeleteUser');
Route::delete('/users/{user}', 'AdministrativeUserController@deleteUser');
Route::get('/groups', 'GroupController@showGroups');
Route::get('/groups/new', 'GroupController@newGroup');