如何在Laravel 5.4

时间:2017-06-16 21:00:36

标签: laravel-5

我正在创建一个Laravel(v5.4)应用,用户可以在其中创建多个组织'每个组织都可以拥有多个项目'但在任何时候,用户只会在一个组织上工作。用户可以通过从顶部菜单中显示的组织列表中选择用户名来选择当前的工作组织。现在,我想要在显示项目创建页面时,而不是提供选择组织的下拉列表,系统应该知道所选组织并仅在此组织下创建项目。还有许多其他的东西需要创建,如调查,任务等,系统必须选择默认组织,而不是从下拉列表中获取。

直到现在,我已经尝试通过设置' organisation_id'来实现它。在会话中,并从所有创建表单上的会话中检索它,但我想知道是否有更好的方法来实现这一点?

1 个答案:

答案 0 :(得分:1)

会话是存储此信息的非常合适的位置。您可以使用中间件添加一个图层来检查organization_id是否存储在请求之间的会话中,还可以作为一种安全措施,防止用户以某种方式通过检查用户和用户来访问他们不属于的组织。 #39; s id确实属于它。例如:

class CanAccessOrganization
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!session('organization_id')) {
              // default to the user's first organization.
              session(['organization_id', Auth::user()->organizations->first()->id]);
        } else {
            // does this user belong to the organization?
            $organization = Organization::find(session('organization_id'));
            if (!in_array($organization->id, Auth::user()->organizations->pluck('id')->all()) {
                // unauthorized! stop the request
                abort(403);
            }
            // set (or reset) the session
            session(['organization_id', $organization->id]);
        }

        return $next($request);
    }
}