我有一个应用程序,它有两个部分-后端和前端。在后台管理员可以登录,在前端客户端可以登录。现在它已经实现了。所有应用程序的查询都是通过管理员和客户端的登录用户id来完成的。
现在我的应用程序需要一个功能,管理员可以查看客户数据一样,客户看到他们的profile.There是在客户端的很多东西。我可以使用Auth::loginUsingId($client_id)。此处,客户端配置文件显示完美,但管理员登录会话如预期的那样丢失。
如何实现这一点,而管理员登录仍然和管理员可以看到客户端的完整数据?
发布于 2017-08-21 03:21:23
让我介绍一下拥有login as client功能的最简单的方法。首先,定义asuser和returnback路由。
路由和操作
Route::get('/asuser/{user}', 'AdminController@asuser')
->where('user', '[0-9]+')
->name('asuser');
Route::get('/returnback', 'ClientController@returnback')
->name('returnback');在管理员的控制器中:
public function asuser(User $client, Request $request) {
/* insert checking if user has right either here with some field
* like $user->is_admin or using middleware settings and Policy
*/
# who user is
$fromId = Auth::user()->getId();
# logging as a client
Auth::login($client, true);
# but keeping admin in a session
$request->session()->put('adm_id', $fromId);
return redirect()->route('some-client-route')
->with('status', 'You are logged in as a client');
}并返回ClientController
public function returnback(Request $request) {
$fromId = Auth::user()->getId();
# getting admin id
$admId = $request->session()->pull('adm_id');
$adminUser = User::find($admId);
if (!$adminUser) {
return redirect()->back()
->with('status', 'Not allowed');
}
# logging out as a client and logging in as admin
Auth::logout();
Auth::login($adminUser, true);
return redirect()->route('some-admin-route')
->with('status', 'Welcome back!');
}是否已准备好投入生产
不,不是的。这不是一个很好的解决方案,它只是一个如何使用它的一瞥。会话具有生存期,因此如果admin在其生存期内没有返回,session variables are lost和他将成为客户端(如果remember me=true,如上面的代码所示)。您可以将值存储在数据库列中,而不是存储在会话中。
此外,正如t1gor提到的,您必须注意这样一个事实,即当管理员是客户端时,您不能记录客户端的操作和发送事件。这是作为客户端进行日志记录最严重的问题。不管怎样,我想,解决这个问题要比把所有的身份验证逻辑移出视图容易得多。
好吧,希望这能对你有所帮助。
发布于 2017-08-20 21:08:11
我认为管理客户端/用户配置文件的一个好方法是在你的后端实现一个用户管理部分,在那里显示和编辑你的用户及其配置文件。
发布于 2017-08-18 18:37:52
Laravel不提供混合会话。您一次只能作为一个用户进行身份验证。如果你真的需要Laravel 5.0中的这类功能,你可以通过hackish user ping-pong来解决这个问题(例如,临时作为客户端登录,然后立即切换回管理员)。
但是你的问题似乎更多的是Authorization-related (相对于Authentication)。Laravel在v5.1.11中实现了一个授权层。由于v5.0不再受支持,因此无论此功能如何,您都应该进行更新。
您可以在官方文档中找到有关授权的更多信息:https://laravel.com/docs/5.1/authorization
https://stackoverflow.com/questions/45671751
复制相似问题