Laravel 5.1使用会话来限制基于用户角色的URL用户的直接访问

时间:2018-04-27 12:54:57

标签: laravel-5

我有2个laravel项目,1个用于前端,我使用html css angularjs。 api控制器的第二个。我使用http post调用并使用angularjs获取api控制器函数来获取内容数据。

在前端我有一个菜单,此菜单根据用户角色显示不同,如果是管理员或否。

这样做了。我的问题是使用浏览器中的URL访问视图。

所以我有一个查询,我可以为每个用户查看菜单中的哪些模块。现在我将结果放在Laravel会话中。

$menu = DB::select menu by user id ... //Getting menu query based on user if admin or no

session(["menu" => $menu);
return session('menu');

我得到的结果和菜单在网站上显示的是基于已登录的用户,如果他是管理员或没有。

现在,为了解决直接网址访问问题,我想使用此会话并将网址与此会话进行比较,如果会话中存在网址我会让他访问,如果不是我会将其重定向到某处。 任何想法?

1 个答案:

答案 0 :(得分:0)

我强烈建议在自定义实现过于漫长之前查看有关授权的Laravel文档:

https://laravel.com/docs/5.1/authorization

如果不了解更多关于前端和后端应用程序如何相互影响的信息,那么进入特定应用程序有点困难,但我会尽力而为。

Laravel返回的每个页面都可以访问Request对象,该对象包含有关返回页面的请求的信息。您可以使用Laravels辅助函数访问此Request及其关联的Route(如果您尚未将其传递给视图)。 getPrefix()方法将返回根相对网址,然后您可以根据需要使用它。例如:

// Return and store the URL as a string
$url = request()->route()->getPrefix();

// Check your session for the URL/s you want to allow and compare to the stored URL
if (session()->get('URL') == $url) {
    // User is allowed access to the page
    // Do something ...
} else {
    // User is not allowed access to this page
    // Redirect back or to a route of your choice
    return redirect()->back();
}

我希望这会给你一些想法,祝你好运!