fix : 테넌트 없는 회원 처리 및 테넌트 등록시 해당 테넌트 디폴트값 설정
This commit is contained in:
@@ -49,16 +49,21 @@ public function handle(Request $request, Closure $next)
|
||||
$user = $accessToken->tokenable;
|
||||
|
||||
if ($user) {
|
||||
// 기본 테넌트(여러개 소속시 우선순위)
|
||||
$tenantId = $user->tenant?->tenant_id ?? $user->userTenants->first()?->tenant_id;
|
||||
// 기본 테넌트(여러개 소속시 활성화 테넌트)
|
||||
$tenantId = $user->userTenants
|
||||
->where('is_default', 1)
|
||||
->first()?->tenant_id
|
||||
?? $user->userTenants->first()?->tenant_id;
|
||||
|
||||
$tenantId = $tenantId ?? 0;
|
||||
|
||||
// tenant_id 설정
|
||||
$request->attributes->set('tenant_id', $tenantId);
|
||||
$request->attributes->set('api_user', $user->id);
|
||||
|
||||
|
||||
// ApiKeyMiddleware 등에서
|
||||
app()->instance('api_user', $user->id);
|
||||
app()->instance('tenant_id', $tenantId);
|
||||
|
||||
// user_id 설정
|
||||
$request->attributes->set('api_user', $user->id);
|
||||
app()->instance('api_user', $user->id);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -75,8 +80,8 @@ public function handle(Request $request, Closure $next)
|
||||
|
||||
if (!in_array($currentRoute, $allowWithoutAuth)) {
|
||||
// 인증정보(api_user, tenant_id) 없으면 튕김
|
||||
if (!app()->bound('api_user') || !app()->bound('tenant_id')) {
|
||||
throw new AuthenticationException('회원정보 또는 테넌트 정보 없음');
|
||||
if (!app()->bound('api_user')) {
|
||||
throw new AuthenticationException('회원정보 정보 없음');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ public function userTenants()
|
||||
|
||||
public function userTenant()
|
||||
{
|
||||
return $this->hasOne(UserTenant::class)->where('is_active', 1);
|
||||
return $this->hasOne(UserTenant::class)->where('is_default', 1);
|
||||
}
|
||||
|
||||
public function userRoles()
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Models\Members\User;
|
||||
use App\Models\Tenants\Tenant;
|
||||
use App\Models\Members\UserTenant;
|
||||
|
||||
class MemberService
|
||||
@@ -49,16 +50,14 @@ public static function getMember(int $userNo)
|
||||
public static function getMyInfo()
|
||||
{
|
||||
$apiUser = app('api_user');
|
||||
$user = User::find($apiUser);
|
||||
$data['user'] = $user;
|
||||
|
||||
$user = User::with([
|
||||
'userTenant.tenant' => function($q) {
|
||||
$q->select('id', 'company_name', 'code', 'email', 'phone', 'address', 'business_num', 'corp_reg_no', 'ceo_name', 'homepage', 'fax', 'logo', 'admin_memo', 'options',); // 원하는 컬럼만
|
||||
}
|
||||
])->find($apiUser);
|
||||
$data=[
|
||||
'user' => $user->userTenant->user,
|
||||
'tenant' => $user->userTenant->tenant,
|
||||
];
|
||||
$tenantId = app('tenant_id');
|
||||
if($tenantId){
|
||||
$tenant = Tenant::find($tenantId);
|
||||
$data['tenant'] = $tenant;
|
||||
}
|
||||
|
||||
return ApiResponse::response('result', $data);
|
||||
}
|
||||
@@ -168,12 +167,14 @@ public static function switchMyTenant(int $tenantId)
|
||||
$apiUser = app('api_user');
|
||||
|
||||
// 1) 현재 유저의 기본 테넌트를 모두 해제
|
||||
UserTenant::where('user_id', $apiUser)
|
||||
UserTenant::withoutGlobalScopes()
|
||||
->where('user_id', $apiUser)
|
||||
->where('is_default', 1)
|
||||
->update(['is_default' => 0]);
|
||||
|
||||
// 2) 지정한 tenant_id를 기본 테넌트로 설정
|
||||
$updated = UserTenant::where('user_id', $apiUser)
|
||||
$updated = UserTenant::withoutGlobalScopes()
|
||||
->where('user_id', $apiUser)
|
||||
->where('tenant_id', $tenantId)
|
||||
->update(['is_default' => 1]);
|
||||
|
||||
|
||||
@@ -257,6 +257,16 @@ public static function storeTenants(array $params = [])
|
||||
|
||||
$tenant = Tenant::create($payload);
|
||||
|
||||
// 성성된 테넌트를 나의 테넌트로 셋팅
|
||||
$apiUser = app('api_user');
|
||||
UserTenant::create([
|
||||
'user_id' => $apiUser,
|
||||
'tenant_id' => $tenant->id,
|
||||
'is_active' => 0,
|
||||
'is_default' => 1,
|
||||
'joined_at' => now(),
|
||||
]);
|
||||
|
||||
// 생성된 리소스를 그대로 반환 (목록 카드용 요약 원하면 컬럼 제한)
|
||||
return ApiResponse::response('result', $tenant);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user