Laravel - 如何根据用户身份验证限制某些功能?

时间:2017-07-09 01:44:31

标签: php laravel

Laravel新手在这里(显然:D)。我已经建立了一个新的模型&名为Pages的模型的控制器。

每个User都有很多Pages

每个Page都有一个User

我创建了以下正常运行的控制器操作(& views):

PagesController::index
PagesController::create
PagesController::store
PagesController::show
PagesController::edit
PagesController::delete

因此,您可以转到Page来修改url.dev/pages/{id}/edit

问题是,无论会话状态如何,您都可以访问所有这些路由。因此,随机用户可以编辑任何给定的Page。显然,这很糟糕。

任何人都可以指出我应该阅读的方向,根据用户是否登录来限制访问模型控制器操作的能力(如果正确的话) 用户,完全没有?

3 个答案:

答案 0 :(得分:1)

你正在寻找中间件.. 您可以阅读更多here

<?php
function working(){
    echo 'WORKED ';
}    
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Dice Game</title>
</head>
<body>
<div>
<div>
    <h1 id="player1" onclick="document.write('<?php working(); ?>')">
        ENTER PLAYER 1 NAME
    </h1>
</div>
</div>
</body>
</html>

答案 1 :(得分:1)

要强制特定路由只能由经过身份验证的用户访问,您可以在控制器构造函数中指定中间件身份验证,如下所示:

public function __construct()
{
    $this->middleware('auth')->only('index');

    $this->middleware('admin')->except('store');
}

您还可以使用public function __construct() { $this->middleware('auth'); } only参数限制要在控制器中应用auth的方法。只使用你可以做到:

except

答案 2 :(得分:0)

其他答案都很好,但我更喜欢在路线组上使用中间件。

所以当我有几条这样的路线时:

Route::get('pages', 'PagesController@index')->name('pages.index');

Route::get('pages/{id}/edit', 'PagesController@edit')->name('pages.edit');

我会将它们添加到Laravel Route组中。像这样:

Route::group(['middleware' => 'auth'], function() {
    Route::get('pages', 'PagesController@index')->name('pages.index');

    Route::get('pages/{id}/edit', 'PagesController@edit')->name('pages.edit');
});