Laravel 5 如何在Laravel 5.4中实现全系统条件

Laravel 5 如何在Laravel 5.4中实现全系统条件,laravel-5,Laravel 5,我正在创建一个Laravel v5.4应用程序,其中用户可以创建多个“组织”,每个组织可以有多个“项目”。但在任何给定时间,用户将只在一个组织上工作。用户可以从顶部菜单中显示的组织列表中选择当前的工作组织以及用户名称。现在,我希望在显示项目创建页面时,系统应该知道所选的组织,而不是提供下拉列表来选择组织,并仅在此组织下创建项目。还有许多其他东西需要创建,如调查、任务等,系统必须选择默认组织,而不是从下拉列表中获取 到目前为止,我一直试图通过在会话中设置“Organization\u id”并从所

我正在创建一个Laravel v5.4应用程序,其中用户可以创建多个“组织”,每个组织可以有多个“项目”。但在任何给定时间,用户将只在一个组织上工作。用户可以从顶部菜单中显示的组织列表中选择当前的工作组织以及用户名称。现在,我希望在显示项目创建页面时,系统应该知道所选的组织,而不是提供下拉列表来选择组织,并仅在此组织下创建项目。还有许多其他东西需要创建,如调查、任务等,系统必须选择默认组织,而不是从下拉列表中获取


到目前为止,我一直试图通过在会话中设置“Organization\u id”并从所有创建表单的会话中检索它来实现这一点,但我想知道是否有更好的方法来实现这一点?

会话是存储此信息的非常合适的地方。您可以使用中间件添加一个层来检查组织id是否存储在请求之间的会话中,还可以通过检查用户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);
    }
}

非常感谢你。这很有帮助。