package incheon.com.security.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 권한 체크 어노테이션 (AOP 방식)
 *
 * 사용법:
 * {@literal @}RequirePermission(system = "AGS", permissions = "PERM_FUNC_EDIT")
 * {@literal @}RequirePermission(system = "AGS", permissions = {"PERM_FUNC_EDIT", "PERM_FUNC_DELETE"})
 * {@literal @}RequirePermission(system = "AGS", permissions = {"PERM_1", "PERM_2"}, requireAll = true)
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequirePermission {

    /** 시스템 코드 */
    String system();

    /** 권한 코드 (OR 조건) */
    String[] permissions();

    /** 권한 설명 (선택) */
    String description() default "";

    /** 모든 권한 필요 (AND 조건) */
    boolean requireAll() default false;
}
