|string> */ public function rules(): array { return [ 'user_id' => 'nullable|string|max:50|unique:users,user_id', 'name' => 'required|string|max:100', 'email' => 'required|email|max:255|unique:users,email', 'phone' => 'nullable|string|max:20', 'password' => 'required|string|min:8|confirmed', 'role' => 'nullable|string|max:50', 'is_active' => 'nullable|boolean', 'is_super_admin' => 'nullable|boolean', 'role_ids' => 'nullable|array', 'role_ids.*' => 'integer|exists:roles,id', 'department_ids' => 'nullable|array', 'department_ids.*' => 'integer|exists:departments,id', ]; } /** * Get custom attributes for validator errors. * * @return array */ public function attributes(): array { return [ 'user_id' => '사용자 ID', 'name' => '이름', 'email' => '이메일', 'phone' => '연락처', 'password' => '비밀번호', 'password_confirmation' => '비밀번호 확인', 'role' => '역할', 'is_active' => '활성 상태', 'is_super_admin' => '슈퍼 관리자', ]; } /** * Get custom messages for validator errors. * * @return array */ public function messages(): array { return [ 'email.unique' => '이미 사용 중인 이메일입니다.', 'user_id.unique' => '이미 사용 중인 사용자 ID입니다.', 'password.confirmed' => '비밀번호가 일치하지 않습니다.', 'password.min' => '비밀번호는 최소 8자 이상이어야 합니다.', ]; } }