【问题标题】:How to secure laravel-permission modules, file-manager or settings?如何保护 laravel 权限模块、文件管理器或设置?
【发布时间】:2017-10-16 08:55:41
【问题描述】:

我创建了两个角色:管理员和编辑。我可以使用

将这些模块的菜单直接保护到 resources/views/vendor/backpack/base/inc/sidebar.blade.php 中
            @role('admin')
            <li class="header">{{ trans('backpack::base.administration') }}</li>
            <!-- ================================================ -->
            <!-- ==== Recommended place for admin menu items ==== -->
            <!-- ================================================ -->
            <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/dashboard') }}"><i class="fa fa-dashboard"></i> <span>{{ trans('backpack::base.dashboard') }}</span></a></li>
            <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/elfinder') }}"><i class="fa fa-files-o"></i> <span>File manager</span></a></li>
            <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/backup') }}"><i class="fa fa-hdd-o"></i> <span>Backups</span></a></li>
            <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/log') }}"><i class="fa fa-terminal"></i> <span>Logs</span></a></li>
            <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/setting') }}"><i class="fa fa-cog"></i> <span>Settings</span></a></li>
            <!-- ======================================= -->
            <li class="header">{{ trans('backpack::base.user') }}</li>
            <!-- Users, Roles Permissions -->
            <li class="treeview">
                <a href="#"><i class="fa fa-group"></i> <span>Users, Roles, Permissions</span> <i class="fa fa-angle-left pull-right"></i></a>
                <ul class="treeview-menu">
                    <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/user') }}"><i class="fa fa-user"></i> <span>Users</span></a></li>
                    <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/role') }}"><i class="fa fa-group"></i> <span>Roles</span></a></li>
                    <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/permission') }}"><i class="fa fa-key"></i> <span>Permissions</span></a></li>
                </ul>
            </li>
            @endrole
            <li><a href="{{ url(config('backpack.base.route_prefix', 'admin') . '/logout') }}"><i class="fa fa-sign-out"></i> <span>{{ trans('backpack::base.logout') }}</span></a></li>
        </ul>

当然,这还没有结束,因为您仍然需要通过输入 URL 来保护编辑器对模块的访问。在 vendor/backpack/permissionmanager/src/app/Http/Controllers/PermissionCrudController.php 方法设置可以使用

Auth::user()->hasRole('admin')

并抛出错误或重定向但...

这不是一个好的解决方案(在供应商的模块中编写)。我该怎么办?如何保护编辑器对上述模块的访问。对不起,如果这对你来说太容易了,我刚刚开始玩 Laravel

附言。 https://github.com/spatie/laravel-permission/issues/507

【问题讨论】:

    标签: php laravel laravel-backpack


    【解决方案1】:

    我建议创建中间件来检查权限或角色,并使用 role:adminpermission:admin 将人员锁定在外,如下所示:

    PermissionMiddleware.php:

    <?php
    namespace App\Http\Middleware;
    use Closure;
    use Auth;
    class PermissionMiddleware
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next, $permission)
        {
            if (Auth::guest()) {
                return redirect('login');
            }
            if (! $request->user()->can($permission)) {
               abort(403);
            }
            return $next($request);
        }
    }
    

    RoleMiddleware.php:

    <?php
    namespace App\Http\Middleware;
    use Closure;
    use Auth;
    class RoleMiddleware
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next, $role)
        {
            if (Auth::guest()) {
                return redirect('login');
            }
            if (! $request->user()->hasRole($role)) {
               abort(403);
            }
            return $next($request);
        }
    }
    

    然后,当您将路由写入 CRUD 时,您应该能够使用这些。如果你想覆盖在 Backpack\Base 中创建的路由,你应该可以通过创建一个文件 routes/backpack/base.php 轻松地做到这一点。然后 Backpack 将加载该文件,而不是包中的文件。详情请见https://github.com/laravel-backpack/base#overwriting-functionality

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 2018-01-08
      • 2017-08-21
      • 1970-01-01
      • 2021-01-02
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多