UserRole.java 2.5 KB
package com.aigeo.common.enums;

import lombok.Getter;

/**
 * 用户角色枚举
 * 对应数据库字段:ai_users.role
 * 
 * 角色权限说明:
 * - ADMIN: 超级管理员,拥有所有权限,包括用户管理、系统配置等
 * - MANAGER: 管理者,可管理内容和用户,但不能修改系统级设置
 * - EDITOR: 编辑者,可创建、编辑、发布内容,不能管理用户
 * - VIEWER: 观察者,只能查看内容,不能编辑或创建
 *
 * @author AIGEO Team
 * @since 1.0.0
 */
@Getter
public enum UserRole {
    
    /**
     * 超级管理员 - 拥有所有权限
     * 可以管理用户、修改公司设置、查看所有数据
     */
    ADMIN("admin", "超级管理员", 4),
    
    /**
     * 管理者 - 内容和用户管理权限
     * 可以管理用户角色、查看统计数据、管理所有内容
     */
    MANAGER("manager", "管理者", 3),
    
    /**
     * 编辑者 - 内容创建和编辑权限
     * 可以创建文章、落地页、网站,管理自己的内容
     */
    EDITOR("editor", "编辑者", 2),
    
    /**
     * 观察者 - 只读权限
     * 只能查看内容和统计数据,不能进行任何修改操作
     */
    VIEWER("viewer", "观察者", 1);

    /**
     * 数据库存储值
     */
    private final String code;
    
    /**
     * 显示名称
     */
    private final String displayName;
    
    /**
     * 权限级别(数字越大权限越高)
     */
    private final Integer level;

    UserRole(String code, String displayName, Integer level) {
        this.code = code;
        this.displayName = displayName;
        this.level = level;
    }
    
    /**
     * 根据代码获取枚举
     */
    public static UserRole fromCode(String code) {
        for (UserRole role : values()) {
            if (role.code.equals(code)) {
                return role;
            }
        }
        throw new IllegalArgumentException("未知的用户角色代码: " + code);
    }
    
    /**
     * 检查是否有管理权限
     */
    public boolean hasManagementPermission() {
        return this == ADMIN || this == MANAGER;
    }
    
    /**
     * 检查是否有编辑权限
     */
    public boolean hasEditPermission() {
        return this.level >= EDITOR.level;
    }
    
    /**
     * 检查是否有系统管理权限
     */
    public boolean hasSystemPermission() {
        return this == ADMIN;
    }
    
    /**
     * 检查权限是否高于指定角色
     */
    public boolean isHigherThan(UserRole other) {
        return this.level > other.level;
    }
}