Add admin login-as (impersonate) feature to member admin list (#4)

Co-authored-by: Lastorder-DC <18280396+Lastorder-DC@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
Copilot 2026-03-02 13:17:40 +09:00 committed by GitHub
parent fdb1f8269b
commit fc0e8a9843
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 68 additions and 1 deletions

View file

@ -1802,6 +1802,47 @@ class MemberAdminController extends Member
return new BaseObject();
}
/**
* Login as a specific member (admin only)
* @return void|BaseObject
*/
function procMemberAdminLoginAs()
{
// Check admin permission and CSRF token
$logged_info = Context::get('logged_info');
if(!$logged_info || $logged_info->is_admin !== 'Y' || !Rhymix\Framework\Security::checkCSRF())
{
throw new Rhymix\Framework\Exceptions\InvalidRequest;
}
$member_srl = Context::get('member_srl');
if(!$member_srl)
{
throw new Rhymix\Framework\Exceptions\InvalidRequest;
}
// Get target member info
$member_info = MemberModel::getMemberInfoByMemberSrl($member_srl);
if(!$member_info || !$member_info->member_srl)
{
throw new Rhymix\Framework\Exceptions\InvalidRequest;
}
// Do not allow login as the super admin (member_srl = 4)
if(intval($member_info->member_srl) === 4)
{
throw new Rhymix\Framework\Exceptions\NotPermitted;
}
// Perform login as the target member
// Session::login() sets the basic session variables, and setSessionInfo() populates Context with member details
Rhymix\Framework\Session::login($member_info->member_srl);
$oMemberController = getController('member');
$oMemberController->setSessionInfo();
$this->setRedirectUrl(getNotEncodedUrl(''));
}
}
/* End of file member.admin.controller.php */
/* Location: ./modules/member/member.admin.controller.php */