1 /*
2 * Copyright 2018 LINE Corporation
3 *
4 * LINE Corporation licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package com.linecorp.centraldogma.server.internal.api.auth;
17
18 import java.lang.annotation.ElementType;
19 import java.lang.annotation.Retention;
20 import java.lang.annotation.RetentionPolicy;
21 import java.lang.annotation.Target;
22
23 import com.linecorp.armeria.server.annotation.Decorator;
24 import com.linecorp.armeria.server.annotation.DecoratorFactory;
25 import com.linecorp.centraldogma.common.ProjectRole;
26 import com.linecorp.centraldogma.server.internal.api.auth.RequiresProjectRoleDecorator.RequiresProjectRoleDecoratorFactory;
27
28 /**
29 * A {@link Decorator} which allows a request from a user granted the specified roles.
30 */
31 @DecoratorFactory(RequiresProjectRoleDecoratorFactory.class)
32 @Retention(RetentionPolicy.RUNTIME)
33 @Target({ ElementType.TYPE, ElementType.METHOD })
34 public @interface RequiresProjectRole {
35 /**
36 * The required {@link ProjectRole}.
37 */
38 ProjectRole value();
39
40 /**
41 * A special parameter in order to specify the order of a {@link Decorator}.
42 */
43 int order() default 0;
44 }