package tech.powerjob.server.auth; import com.google.common.collect.Sets; import lombok.AllArgsConstructor; import lombok.Getter; import java.util.Set; import static tech.powerjob.server.auth.Permission.*; /** * 角色 * PowerJob 采用 RBAC 实现权限,出于实际需求的考虑,不决定采用动态权限模型。因此 RBAC 中的角色和权限均在此处定义。 * 如果有自定义诉求,可以修改 Role 的定义 * * @author tjq * @since 2023/3/20 */ @Getter @AllArgsConstructor public enum Role { /** * 观察者,默认只读权限 */ OBSERVER(10, Sets.newHashSet(READ)), /** * 技术质量,读 + 操作权限 */ QA(20, Sets.newHashSet(READ, OPS)), /** * 开发者,读 + 编辑 + 操作权限 */ DEVELOPER(30, Sets.newHashSet(READ, WRITE, OPS)), /** * 管理员 */ ADMIN(40, Sets.newHashSet(READ, WRITE, OPS, SU)) ; private final int v; private final Set permissions; public static Role of(int vv) { for (Role role : values()) { if (vv == role.v) { return role; } } throw new IllegalArgumentException("unknown role: " + vv); } }