Chuyển tới nội dung chính

Người dùng, tổ chức & phân quyền

Quản lý định danh và phân quyền: người dùng, tổ chức, vai trò, nhóm quyền, menu, chức vụ, tài khoản tự phục vụ (đổi thông tin, mật khẩu, số điện thoại, email, quên mật khẩu) và OTP. Dùng khi service cần thao tác trực tiếp dữ liệu người dùng/tổ chức thay vì gọi qua REST API.

Khi nào sử dụng

  • Service cần đọc/ghi người dùng, tổ chức, vai trò, nhóm quyền, menu, chức vụ.
  • Cần kiểm tra chính sách mật khẩu trước khi đặt/đổi mật khẩu.
  • Cần gửi thông báo tài khoản, OTP qua email/SMS cho các luồng tự phục vụ.
  • Cần chạy các tác vụ bảo trì tài khoản theo lịch: khóa tài khoản hết hạn, khóa khi mật khẩu hết hạn, cảnh báo mật khẩu sắp hết hạn, tự động mở khóa.

Cài đặt

Thêm dependency vào pom.xml (không cần khai version vì đã được quản lý qua BOM):

<dependency>
<groupId>vn.govex.cloud</groupId>
<artifactId>govex-cloud-iam</artifactId>
</dependency>

Version do BOM vn.govex.cloud:dependencies quản lý — xem Cài đặt.

Tự cấu hình qua IamConfiguration; chỉ cần thêm dependency là các bean service lõi (UserService, OrganizationService, AccountService, PasswordPolicyManager...) sẵn sàng để inject.

Cấu hình

Các tham số nghiệp vụ (chính sách mật khẩu, thời hạn khóa tài khoản...) được đọc từ bảng setting của govex-cloud-config qua SettingRepository.

Các setting chính sách mật khẩu có tiền tố govex.password.policy.:

SettingMô tảMặc định
govex.password.policy.password_least_lengthĐộ dài tối thiểu của mật khẩu.hằng số mặc định của dependency
govex.password.policy.password_biggest_lengthĐộ dài tối đa của mật khẩu.hằng số mặc định của dependency
govex.password.policy.password_complexityQuy tắc độ phức tạp của mật khẩu.hằng số mặc định của dependency
govex.password.policy.weak_password_checkBật/tắt kiểm tra mật khẩu yếu.hằng số mặc định của dependency
govex.password.policy.account_info_checkChặn mật khẩu chứa thông tin tài khoản.hằng số mặc định của dependency
govex.password.policy.not_same_charsKhông cho phép nhiều ký tự giống nhau liên tiếp.hằng số mặc định của dependency
govex.password.policy.history_password_checkBật/tắt kiểm tra trùng mật khẩu trong lịch sử.hằng số mặc định của dependency
govex.password.policy.history_password_check_countSố mật khẩu lịch sử đối chiếu.hằng số mặc định của dependency
govex.password.policy.illegal_sequence_checkChặn chuỗi ký tự bất hợp lệ (ví dụ 123456, abcde).hằng số mặc định của dependency
govex.password.policy.password_valid_daysSố ngày hiệu lực của mật khẩu.hằng số mặc định của dependency
govex.password.policy.password_valid_warn_before_daysSố ngày cảnh báo trước khi mật khẩu hết hạn.hằng số mặc định của dependency
govex.password.policy.custom_weak_password_libDanh sách mật khẩu yếu do người dùng tự định nghĩa.hằng số mặc định của dependency

Khi một setting chưa tồn tại trong bảng setting, dependency dùng giá trị mặc định khai báo trong PasswordPolicySettingConstants.

Sử dụng

Inject service nghiệp vụ và dùng trực tiếp:

@Service
@RequiredArgsConstructor
public class UserFacade {
private final UserService userService;

public GovexUserDetails getUserDetails(String userId) {
return userService.getUserDetails(userId);
}

public boolean lockUser(String userId) {
return userService.changeUserStatus(userId, UserStatus.LOCKED);
}
}

Kiểm tra chính sách mật khẩu trước khi lưu mật khẩu mới (implementation mặc định do govex-cloud-iam cung cấp):

@Service
@RequiredArgsConstructor
public class PasswordFacade {
private final PasswordPolicyManager passwordPolicyManager;

public void checkNewPassword(String userId, String rawPassword) {
passwordPolicyManager.validate(userId, rawPassword);
}
}

Truy vấn tổ chức và luồng tài khoản tự phục vụ:

List<SearchOrganizationResult> matches = organizationService.searchOrganization(keyword);
accountService.prepareChangePassword(prepareChangePasswordRequest);
accountService.changePassword(changePasswordRequest);

Ghi audit cho thao tác nghiệp vụ bằng annotation @SysLog (trong govex-cloud-log):

@SysLog(type = EventType.MODIFY_ACCOUNT_INFO_PORTAL)
@PutMapping("/change_info")
public ResultMessage<Boolean> changeInfo(@RequestBody @Validated UpdateUserInfoRequest param) {
// ...
}

Lưu ý

  • Ứng dụng triển khai phải đảm bảo schema các bảng IAM tồn tại trước khi chạy: users, user_detail, user_group, user_group_member, organization, organization_member, role, role_group, role_menu, role_organization, menu, positions, user_position, user_role, user_history_password.
  • Các tác vụ trong package task (khóa/mở khóa tài khoản, cảnh báo mật khẩu) không tự được đăng ký bean; muốn dùng phải khai báo bean và bật @EnableScheduling ở ứng dụng.
  • Luồng OTP, thông báo tài khoản cần các bean MailMsgEventPublish (govex-cloud-mail) và SmsMsgEventPublish (govex-cloud-sms).
  • Các bean service lõi có @ConditionalOnMissingBean — ứng dụng có thể override bằng bean riêng khi cần.
  • Cần JPA/datasource hoạt động vì dependency dùng @EntityScan/@EnableJpaRepositories; chính sách mật khẩu cần SettingRepository từ govex-cloud-config.