将管理内容与Laravel中的用户内容分开的一种很好的做法

时间:2014-08-25 12:40:34

标签: php laravel

使用Laravel项目来学习框架。我只想就如何分离例如管理菜单和管理常规用户内容的内容提出一些意见/讨论。由于我是框架的新手,我不知道我的方式是否是一种很好的方法,也许有更好的做法。

现在我在routes.php之前使用过滤器进行检查,以便未经授权的人员无法访问管理员内容。

Route::group(array('before' => 'superAdmin'), function()
{
    Route::get('/admin_start', array(
        'as' => 'admin_start',
        'uses' => 'HomeController@getAdminStart'
    ));
});

我有一个main.blade.php布局文件,用于确定是否应显示管理员或用户菜单。

<body>
    @if(Auth::check())
        @if (Auth::user()->hasRole('Superadmin'))
            @include('layout.navigationadmin')
        @else
            @include('layout.navigationuser')           
        @endif
    @endif
    @yield('content')
</body>

这是一种好/安全的方法吗?

3 个答案:

答案 0 :(得分:1)

取决于管理员内容和访问者(未经过身份验证的)内容的结构差异,以及您希望如何严格执行您的关注分离。

管理页面/视图与未经身份验证的用户视图完全不同

我将从不同的基本布局(您从中扩展的刀片布局)开始。请注意,这并不意味着它们彼此完全分离,您可以始终包含通常共享的相同片段/部分刀片视图。

它们在某些面板/子组件/等方面有所不同,但除此之外它们看起来很像彼此

可以共享相同的布局,但尝试重用尽可能多的子视图块。当你有太多if / else语句只是为了包含不同的模板时,你会知道;重新考虑选项1可能是一个好主意。如果您对刀片模板进行模块化,则可以轻松切换。

在你的情况下,如果导航确实是唯一区分管理员和普通用户的东西,请随意选择2.否则可能选项1.只需我的两分钱。

答案 1 :(得分:0)

它会奏效,但我不会说最佳做法。 Laravel有这些东西的过滤器,这是一个很好的资源来建立一个登录:http://culttt.com/2013/09/16/use-laravel-4-filters/

答案 2 :(得分:0)

您的端点在上面的代码中受到保护,但如果您正在寻找基于用户角色添加菜单项的更好方法,则ID建议视图编辑将某些数据绑定到您的视图。

类似的东西:

Composers.php:添加文件app/composers.php,将其包含在app/start/global.php中,并将其放入其中。

View::composer(['layouts.master'], function($view){

    if(Auth::check()){
        $authClass = 'logged-in';

        $items = MenuMaker::getInternalItems();

        if(Auth::user()->hasRole('Superadmin'))
            $items = array_merge($items, [ 'your admin items' ])

    } else {
        $items  = MenuMaker::getPublicItems();

        $authClass = 'logged-out';

        $view->with('mainNav', View::make('components.mainNavPublic', ['items' => $items]))
                ->with('authClass', $authClass);

    }

});

查看:

<body class="{{ $authClass }}">
    {{ $mainNav }}
    @yield('content')
</body>