Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel用户角色访问视图中的内容_Php_Laravel 5_Middleware - Fatal编程技术网

Php Laravel用户角色访问视图中的内容

Php Laravel用户角色访问视图中的内容,php,laravel-5,middleware,Php,Laravel 5,Middleware,有150多个视图,其中包含“编辑”、“查看”和“添加”列的表内容。我想根据用户角色限制查看。例如,如果管理员登录,他可以看到所有的选项,如果其他他只能添加,不能删除和编辑。我们如何才能做到这一点?一种方法是为不同的角色调用不同的视图,但这不是冗余,甚至有150多个视图 Blade中的条件渲染 您可以在视图中检查用户权限,然后决定用户应该能看到什么和不能看到什么 @if(Auth::user()->admin) <input name="website_logo_url" t

有150多个视图,其中包含“编辑”、“查看”和“添加”列的表内容。我想根据用户角色限制查看。例如,如果管理员登录,他可以看到所有的选项,如果其他他只能添加,不能删除和编辑。我们如何才能做到这一点?一种方法是为不同的角色调用不同的视图,但这不是冗余,甚至有150多个视图

Blade中的条件渲染 您可以在视图中检查用户权限,然后决定用户应该能看到什么和不能看到什么

@if(Auth::user()->admin) 
    <input name="website_logo_url" type="text" />
@endif
@if(Auth::user()->admin)
@恩迪夫
使用中间件 您可以使用中间件拒绝对某些视图的访问

  • 使用artisan:
    php artisan make:middlware MiddlewareName创建中间件
  • 通过以下Laravel文档定义您的中间件行为:

当数据库中有一个包含角色的表时,您可以在web.php文件中执行类似操作

Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function() {

....

});
然后创建一个称为“AdminMiddleware”之类的中间件

您在该中间件组中设置的每个路由都被限制为您在中间件文件中设置的路由。看看这个中间件文件:

public function handle($request, Closure $next)
{
    $allowed_role_ids = [2];

    if (!in_array($request->user()->role_id, $allowed_role_ids))
    {
        return redirect('/')->with('flash', 'U heeft hier geen toegang voor');
    } elseif(Auth::guest()) {

        return redirect('/')->with('flash', 'U bent een gast, U heeft hier geen toegang voor');
    }

    return $next($request);
}

如果用户的请求角色ID不是允许的角色ID,则不允许访问该路由。如果是,它将重定向到所需的路由。我希望这能解决您的问题。

您可以使用中间件来解决这个问题。阅读并明确“保护路线”部分认证已经完成,甚至根据角色显示选项卡,但我的要求是限制表中不同角色的列对
Laravel授权进行一些研究
-Ya这是一个想法,但有150多个视图,甚至大约10个角色。这个解决方案可能会更多,如果其他条件和需要添加在所有页面。您需要隐藏整个视图还是仅隐藏部分视图?如果您需要隐藏某些URL以使其对没有权限的人不可用,您可以通过使用中间件来实现,如果您需要隐藏部分视图,则需要花费一些时间,您需要编辑这些视图并添加所需的行为。。PS:这是一个非常糟糕的做法,但是您可以使用ob_start、ob_end_flush等PHP函数在到达用户之前生成视图并捕获HTML缓冲区。然后您可以删除一些HTML,但我重复一遍:在Laravel中这样做是非常糟糕的,因为您已经有了Blade!