针对多租户系统的试用方案设计,可以结合RBAC模型和试用状态管理来实现。以下是具体的设计思路和实现步骤:


1. 试用状态管理

  • 字段扩展:在用户表中添加以下字段:
    • trial_start_time:试用开始时间。
    • trial_end_time:试用结束时间。
    • is_trial:标识用户是否为试用状态。
    • is_active:标识用户是否可用(试用到期后设为false)。
  • 逻辑
    • 用户注册时,默认开启试用,设置is_trial=true,并记录trial_start_timetrial_end_time
    • 试用到期后,将is_trial设为false,但保留is_active=true(确保权限数据不丢失)。

2. 权限控制调整

  • RBAC模型扩展
    • 在权限表中添加一个字段is_trial_allowed,标识该权限是否允许试用用户使用。
    • 例如,只读操作的权限可以标记为is_trial_allowed=true,而写操作标记为false
  • 逻辑
    • 试用用户(is_trial=true)只能访问is_trial_allowed=true的权限。
    • 试用到期后(is_trial=false),用户保留所有权限数据,但无法执行任何操作(通过is_active=false控制)。

3. 后端拦截逻辑

  • 拦截器或AOP
    • 在每次请求时,检查用户的is_trialis_active状态。
    • 如果is_trial=falseis_active=false,返回提示“试用已到期,请联系管理员”。
    • 如果is_trial=true,进一步检查请求的权限是否允许试用用户访问。

4. 前端提示

  • 试用到期后,前端根据后端返回的状态显示提示信息,并禁用所有写操作按钮。

5. 数据库变更

  • 修改用户表结构,添加上述字段。
  • 示例SQL:
    ALTER TABLE sys_user 
    ADD COLUMN trial_start_time DATETIME,
    ADD COLUMN trial_end_time DATETIME,
    ADD COLUMN is_trial BOOLEAN DEFAULT FALSE,
    ADD COLUMN is_active BOOLEAN DEFAULT TRUE;
    

6. 代码实现

  • 用户注册逻辑
    // 设置试用信息
    user.setTrialStartTime(new Date());
    user.setTrialEndTime(DateUtils.addDays(new Date(), 30)); // 假设试用期为30天
    user.setIsTrial(true);
    user.setIsActive(true);
    
  • 权限检查逻辑
    @Override
    public boolean hasPermission(String permission) {
        User user = getCurrentUser();
        if (!user.getIsActive()) {
            throw new RuntimeException("试用已到期,请联系管理员");
        }
        if (user.getIsTrial() && !permissionService.isTrialAllowed(permission)) {
            throw new RuntimeException("试用用户无权执行此操作");
        }
        return super.hasPermission(permission);
    }
    

7. 试用到期处理

  • 定时任务
    每天检查试用到期的用户,将is_trialis_active更新为false
    @Scheduled(cron = "0 0 0 * * ?")
    public void checkTrialExpiration() {
        List<User> expiredUsers = userMapper.selectExpiredTrials();
        for (User user : expiredUsers) {
            user.setIsTrial(false);
            user.setIsActive(false);
            userMapper.updateUser(user);
        }
    }
    

8. 安全性

  • 确保试用用户的数据隔离,避免试用用户访问其他租户的数据。
  • 使用缓存(如Redis)存储用户状态,减少数据库查询压力。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐