/*
 * Copyright (c) 2025 SimcuTeam. All rights reserved.
 * 遵循 MIT 许可证。
 */

package simcu::simapi.annotations

/**
 * 声明式鉴权注解。
 *
 * 标注在控制器方法或类上，请求派发时（SimApiRequestDelegateFactory）自动执行鉴权：
 *   - 未登录（无 LoginInfo）→ 401
 *   - type 非空且登录用户类型不匹配 → 403
 *   - 遍历执行所有已注册的 SimApiAuthChecker
 *
 * 用法：
 *   @SimApiAuth               // 任意已登录用户
 *   @SimApiAuth["admin"]      // 仅 admin 类型
 *   @SimApiAuth["admin,user"] // admin 或 user 类型
 *
 * 说明：仓颉注解参数须为编译期常量，String 无法作为 const 值数组元素，
 * 故用逗号分隔字符串表示多种类型。
 */
@Annotation[target: [MemberFunction, Type]]
public class SimApiAuth {
    /// 允许访问的用户类型（空 = 任意已登录用户）
    public let `type`: String

    public const init() {
        this.`type` = ""
    }

    public const init(value: String) {
        this.`type` = value
    }
}
