accountService.getById(getId()).getSex();
Свойства окружения, такие как текущее время, IP посетителя и т. д.
@Component
public class ContextualModel {
/**
* Время
*/
public Long getNowTime() {
return System.currentTimeMillis();
}
}
Операционные свойства, такие как удаление, добавление, запрос и т.д.
@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");
}
}
/**
* @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 )