Ограничение доступа незарегистрированных пользователей к панели администратора в Laravel - проблема маршрутизации - PullRequest
0 голосов
/ 02 июля 2018

Я начал создавать свое собственное очень простое приложение для блога, которое будет состоять из главной страницы с сообщениями и админ-панели, доступной только для меня. Я не хочу, чтобы зрители имели доступ к странице входа в систему, она должна быть только для одного пользователя - администратора.

У меня уже есть панель администратора, из которой я могу создавать, редактировать, просматривать и удалять сообщения, хранящиеся в базе данных MySQL, также сообщения отображаются на главной странице. Моя проблема в том, что я борюсь за защиту панели администратора от незарегистрированных пользователей.

Как мне это сделать, идея такова: если вы вошли в систему - вы являетесь администратором, вы можете получить доступ к панели администратора, просмотры которой хранятся в views / admin, если нет - вы можете видеть только те сообщения, которые отображаются на главной страница в папке просмотров.

publicHomePageTemplate.blade.php (часть, отвечающая за отображение сообщений)

@ foreach ($ статьи как $ статья)

          <div class="well well-lg">
            <h3>{{$article->title}}</h3>
            <p>{{$article->body}}</p>

        </div>

         @endforeach

Контроллер статьи

namespace App \ Http \ Controllers;

использовать Illuminate \ Http \ Request; использовать приложение \ Статья;

класс ArticleController расширяет контроллер { / ** * Отображение списка ресурсов. * * @return \ Illuminate \ Http \ Response * / публичная функция publicHomePage () { $ article = Article :: paginate (4);

     return view('articles/publicHomePageTemplate',    ['articles'=>$articles]);
 }

    public function index()
    {
    $articles = Article::latest()->paginate(5);
    return view('admin.index',compact('articles'))
        ->with('i', (request()->input('page', 1) - 1) * 5);
    }


/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    return view('admin.create');
}


/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    request()->validate([
        'title' => 'required',
        'body' => 'required',
    ]);
    Article::create($request->all());
    return redirect()->route('admin.index')
                    ->with('success','Article created successfully');
}


/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    $article = Article::find($id);
    return view('admin.show',compact('article'));
}


/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
    $article = Article::find($id);
    return view('admin.edit',compact('article'));
}


/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    request()->validate([
        'title' => 'required',
        'body' => 'required',
    ]);
    Article::find($id)->update($request->all());
    return redirect()->route('admin.index')
                    ->with('success','Article updated successfully');
}


/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    Article::find($id)->delete();
    return redirect()->route('admin.index')
                    ->with('success','Article deleted successfully');
}

}

До сих пор я начал реализовывать систему аутентификации с помощью php artisan: make auth

Есть идеи, как решить эту проблему

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

если вы добавите поле «роль» в вашу таблицу, попробуйте if (Auth :: user () -> role == 'admin') {} else {}. Вы также можете использовать этот код в своем блейд-файле, например @if ().

0 голосов
/ 02 июля 2018

Создайте промежуточное ПО, которое блокирует пользователей, которым не нужен доступ к администратору

Это относится к Http-ядру в $ middlewareGroups

'admin' => [
    'web',
    \App\Http\Middleware\Permissions\AdminChecker::class,
],

затем вы создаете промежуточное ПО, которое проверяет текущего пользователя

public function handle($request, Closure $next)
{
    $user = $request->user();

    if (!$user || !$user->isAdmin()) {
        throw new AuthenticationException;
    }

    return $next($request);
}

Затем убедитесь, что ваши административные маршруты используют группу администраторов. В RouteServiceProvider

Route::group([
            'middleware' => 'admin',
            'namespace' => $this->namespace.'\Admin',
            'prefix' => 'admin',
        ], function ($router) {
            require base_path('routes/admin.php');
        });

затем вы помещаете свои маршруты администратора в 'routs / admin.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...