Laravel 4 身份验证。限制对资源的某些功能的访问,但不是全部

Posted

技术标签:

【中文标题】Laravel 4 身份验证。限制对资源的某些功能的访问,但不是全部【英文标题】:Laravel 4 authentication. Restrict access to some functions of a resource but not all 【发布时间】:2013-09-09 21:17:46 【问题描述】:

我有这个博客资源,它具有常用的 CRUD 方法。(索引、创建、存储、显示、编辑、更新、销毁)。

我的 routes.php 中有以下路由:

Route::resource('blog', 'PostsController');

但我想限制除索引和显示之外的所有内容。 所以我有

Route::get('blog', 'PostsController@index');
Route::group(array('before' => 'auth'), function()

    Route::resource('blog', 'PostsController');
);

这对索引很好,但我不知道如何路由显示方法?还是有其他方法?我应该单独路由每个 URI 并将我想要限制的那些放在我的受限访问路由中,而不是路由资源?

干杯

【问题讨论】:

【参考方案1】:

Laravel 有一个功能可以让你在控制器的 __construct 方法中使用 $this->beforeFilter 指定过滤器。此函数采用第二个参数,允许您提供异常(或仅对某些方法启用过滤器)。尝试使用您的原始路由文件并像这样设置您的控制器:

class PostsController extends BaseController 

    function __construct() 
        // ...
        $this->beforeFilter('auth', array('except' => array('index', 'show')));
        // ...
    

    // ...

请参阅Laravel documentation 中的控制器过滤器。它的文档并不完整,但您也可以从 here 开始更深入地了解 Laravel 的核心。

【讨论】:

感谢似乎是一个有效的选项 正是我想要的。 Laravel 很棒。【参考方案2】:

在 Laravel 5 中,您可以像这样使用中间件函数:

$this->middleware('auth', array('except' => array('index', 'show')));

【讨论】:

以上是关于Laravel 4 身份验证。限制对资源的某些功能的访问,但不是全部的主要内容,如果未能解决你的问题,请参考以下文章

laravel 频率限制throttle

在 apache 2.4 中结合子文件夹的 ip 和用户身份验证限制

Apache LDAP 身份验证仅适用于某些虚拟主机

仅在 Laravel 中公开某些身份验证路由

Laravel 4 多用户身份验证

身份验证:是否可以使用Devise注册凭据来限制或授予对帖子模型的访问权限?