1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/lucky-color-loop-auth

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 22:48 9c76650

accountService.getById(getId()).getSex();

Свойства окружения

Свойства окружения, такие как текущее время, IP посетителя и т. д.

@Component
public class ContextualModel {

    /**
     * Время
     */
    public Long getNowTime() {
        return System.currentTimeMillis();
    }
}

Операционные свойства

  • LoopAuthHttpMode — это перечисление для типов запросов, включая GET, PUT, POST или ALL и другие распространённые типы запросов.

Операционные свойства, такие как удаление, добавление, запрос и т.д.

@Component
public class ActionModel {

    /**
     * Тип запроса
     */
    public LoopAuthHttpMode getLoopAuthHttpMode() {
        Optional<ServletRequestAttributes> servletRequestAttributes = Optional.ofNullable((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
        HttpServletRequest request = servletRequestAttributes
                .orElseThrow(() -> new LoopAuthParamException(LoopAuthExceptionEnum.PARAM_IS_NULL, "ServletRequestAttributes Failed to get"))
                .getRequest();
        return LoopAuthHttpMode.valueOf(request.getMethod());
    }

}

Свойства объекта доступа

Свойства объекта доступа, которые связаны с бизнесом, например, диапазон идентификаторов данных, тип данных и т. д.

@Component
public class ResObjectModel {

    public String getId() {
        Optional<ServletRequestAttributes> servletRequestAttributes = Optional.ofNullable((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
        HttpServletRequest request = servletRequestAttributes
                .orElseThrow(() -> new LoopAuthParamException(LoopAuthExceptionEnum.PARAM_IS_NULL, "ServletRequestAttributes Failed to get"))
                .getRequest();

        return request.getParameter("id");
    }
}

Реализация интерфейса AbacInterface

  • LoopAuthHttpMode является перечислением для типов запросов, включая GET, PUT, POST или ALL и другие распространённые типы запросов.
/**
 * @author Sober
 */
@Component
public class AbacInterFaceImpl
        extends AbacWrapper<ActionModel, ContextualModel, ResObjectModel, UserModel>
        implements AbacInterface<ActionModel, ContextualModel, ResObjectModel, UserModel> {

    /**
     * Инъекция
     */
    AbacInterFaceImpl(ActionModel actionModel,
                      ContextualModel contextualModel,
                      UserModel userModel,
                      ResObjectModel resObjectModel) {
        this.action = actionModel;

        this.contextual = contextualModel;

        this.subject = userModel;

        this.resObject = resObjectModel;

        // Тема посетителя обычно является свойством учётной записи
        Subject<UserModel> subject = Subject
                // Инициализация правила id
                .init("loginId",
                        UserModel::getId,
                        (v, r) -> v.get().equals(r))
                // Инициализация гендерного правила
                .structure("sex",
                        UserModel::getSex,
                        (v, r) -> {
                            Short sex = Short.valueOf(r);
                            return v.get().equals(sex);
                        });

        // Свойства среды обычно не являются свойствами учётной записи, такими как время, ip и т. д.
        Contextual<ContextualModel> contextual = Contextual
                // Инициализация временного правила
                .init("time",
                        ContextualModel::getNowTime,
                        (v, r) -> {
                            long time = v.get();
                            long roletime = Long.parseLong(r);
                            return roletime > time;
                        }
                );

        // Тип операции обычно представляет собой метод запроса GET или код операции и т. д.
        Action<ActionModel> action = Action
                // Инициализация правила типа операции
                .init("model",
                        ActionModel::getLoopAuthHttpMode,
                        (v, r) -> {
                            LoopAuthHttpMode vMode = v.get();
                            return Arrays.stream(r.split(","))
                                    .map(LoopAuthHttpMode::valueOf)
                                    .anyMatch(item -> item.equals(vMode));
                        });

        // Объект доступа
        ResObject<ResObjectModel> resObject = ResObject
                .init("idByGetMode",
                        ResObjectModel::getId,
                        (v, r) -> r.equals(v.get())
                );

        // Загрузка правил
        policyWrapper = PolicyWrapper.<ActionModel, ContextualModel, ResObjectModel, UserModel>builder()
``` **Субъект (subject)**

**Действие (action)**

**Контекст (contextual)**

**Объект результата (resObject)**
/**
 * Получение одного или нескольких правил, принадлежащих маршруту/коду полномочий
 * @param route маршрут
 * @param loopAuthHttpMode способ запроса
 * @return уникальное множество
 */
@Override
public Set<Policy> getPolicySet(String route, LoopAuthHttpMode loopAuthHttpMode) {
    // Здесь только демонстрация, пожалуйста, напишите самостоятельно, в соответствии с вашим способом запроса и получения abac правил
    Set<Policy> set = new HashSet<>();
    // Запрос и вставка по маршруту и способу запроса

    // Получить запрос списка учётных записей, необходимо проверить, что пол текущего пользователя равен 1
    if ("/time".equals(route) && loopAuthHttpMode.equals(LoopAuthHttpMode.GET)) {
        set.add(new Policy()
            // Название правила
            .setName("abac время тестирования")
            // Только мужчины могут получить доступ к этому интерфейсу

// .setSubjectProperty("sex", "1") // Время должно быть меньше 1677764476507 .setContextualProperty("time", "1677764476507")); }

    // Получить запрос списка учётных записей, необходимо подтвердить, что пол текущего пользователя равен 1

// if ("/account".equals(route)){ // set.add(new Policy() // // Название правила // .setName("resful") // // id должен соответствовать для выполнения // .setSubjectProperty("loginId", "1585296315037323265") // // Имеет полномочия типа операции GET, DELETE // .setActionProperty("model", "GET,DELETE") // // Доступ только к цели с id 1585296315037323265 // .setResObjectProperty("idByGetMode", "1585296315037323265")); // } return set; }

/**
 * Получить правило
 */
@Override
public PolicyWrapper<ActionModel, ContextualModel, ResObjectModel, UserModel> getPolicyWrapper() {
    return policyWrapper;
}

}


Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/lucky-color-loop-auth.git
git@api.gitlife.ru:oschina-mirror/lucky-color-loop-auth.git
oschina-mirror
lucky-color-loop-auth
lucky-color-loop-auth
master