prod_cc/include/user_manager.hpp

213 lines
6.0 KiB
C++
Raw Permalink Normal View History

2026-07-13 03:03:59 +00:00
#ifndef IMS_USER_MANAGER_HPP
#define IMS_USER_MANAGER_HPP
#include "ims_types.hpp"
#include <memory>
#include <unordered_map>
#include <unordered_set>
namespace ims {
/// @brief 用户、角色、部门、权限、字典、参数统一管理类。
///
/// 负责组织架构与权限体系的核心逻辑,包括用户/角色/部门 CRUD、
/// 角色权限分配、菜单/按钮权限控制、数据权限过滤,
/// 以及数据字典和系统参数配置的维护。
class UserManager {
public:
UserManager();
~UserManager();
// ==================== 用户管理 (SRS-IMS_F-001) ====================
/**
* @brief
*
* @requirement(name="用户管理", id="SRS-IMS_F-001")
* 使 BCrypt
*/
int64_t addUser(const User& user);
/**
* @brief
*
* @requirement(name="用户管理", id="SRS-IMS_F-001")
* user_id
*/
bool updateUser(const User& user);
/**
* @brief
*
* @requirement(name="用户管理", id="SRS-IMS_F-001")
* DELETED
*/
bool deleteUser(int64_t user_id);
/**
* @brief
*
* @requirement(name="用户管理", id="SRS-IMS_F-001")
*
*/
PageResult<User> findUsers(const std::string& keyword,
int64_t dept_id,
const PageRequest& page);
// ==================== 角色管理 (SRS-IMS_F-002) ====================
/**
* @brief
*
* @requirement(name="角色管理", id="SRS-IMS_F-002")
*/
int64_t addRole(const Role& role);
/**
* @brief
*
* @requirement(name="角色管理", id="SRS-IMS_F-002")
*/
bool updateRole(const Role& role);
/**
* @brief
*
* @requirement(name="角色管理", id="SRS-IMS_F-002")
*/
bool deleteRole(int64_t role_id);
/**
* @brief
*
* @requirement(name="角色管理", id="SRS-IMS_F-002")
*/
std::vector<Role> findAllRoles();
// ==================== 部门管理 (SRS-IMS_F-003) ====================
/**
* @brief
*
* @requirement(name="部门管理", id="SRS-IMS_F-003")
*/
int64_t addDepartment(const Department& dept);
/**
* @brief
*
* @requirement(name="部门管理", id="SRS-IMS_F-003")
*/
bool updateDepartment(const Department& dept);
/**
* @brief
*
* @requirement(name="部门管理", id="SRS-IMS_F-003")
*/
bool deleteDepartment(int64_t dept_id);
/**
* @brief
*
* @requirement(name="部门管理", id="SRS-IMS_F-003")
* parent_id
*/
std::vector<Department> getDepartmentTree(int64_t parent_id);
// ==================== 字典管理 (SRS-IMS_F-004) ====================
/**
* @brief
*
* @requirement(name="字典管理", id="SRS-IMS_F-004")
*/
void addDictItem(const DictItem& item);
/**
* @brief
*
* @requirement(name="字典管理", id="SRS-IMS_F-004")
*/
std::vector<DictItem> getDictByType(const std::string& dict_type);
/**
* @brief
*
* @requirement(name="字典管理", id="SRS-IMS_F-004")
*/
bool removeDictItem(const std::string& dict_type, const std::string& item_key);
// ==================== 参数配置 (SRS-IMS_F-005) ====================
/**
* @brief
*
* @requirement(name="参数配置", id="SRS-IMS_F-005")
*/
void setParameter(const SysParam& param);
/**
* @brief
*
* @requirement(name="参数配置", id="SRS-IMS_F-005")
*/
std::string getParameter(const std::string& param_key);
// ==================== 角色权限分配 (SRS-IMS_F-006) ====================
/**
* @brief
*
* @requirement(name="角色权限分配", id="SRS-IMS_F-006")
* ID
*/
bool assignPermissionsToRole(int64_t role_id,
const std::vector<int64_t>& perm_ids);
/**
* @brief
*
* @requirement(name="角色权限分配", id="SRS-IMS_F-006")
*/
std::vector<Permission> getPermissionsByRole(int64_t role_id);
// ==================== 菜单权限管理 (SRS-IMS_F-007) ====================
/**
* @brief
*
* @requirement(name="菜单权限管理", id="SRS-IMS_F-007")
* is_menu=true
*/
std::vector<Permission> getMenuByUserId(int64_t user_id);
// ==================== 按钮权限管理 (SRS-IMS_F-008) ====================
/**
* @brief
*
* @requirement(name="按钮权限管理", id="SRS-IMS_F-008")
* perm_code
*/
bool hasButtonPermission(int64_t user_id, const std::string& perm_code);
// ==================== 数据权限分级管控 (SRS-IMS_F-009) ====================
/**
* @brief
*
* @requirement(name="数据权限分级管控", id="SRS-IMS_F-009")
* 访 ID
*/
std::unordered_set<int64_t> getAccessibleDeptIds(int64_t user_id);
private:
struct Impl;
std::unique_ptr<Impl> pImpl_;
};
} // namespace ims
#endif // IMS_USER_MANAGER_HPP