Я смоделирую вам некоторую ситуацию, используя упрощенные сущности, затем задам вопрос.
Account.java
public class Account {
private int id;
private String username;
private String password;
private String role;
}
Group.java
public class Group {
private int id;
private String groupName;
private int id_group_parent;
}
GroupMember.java
public class GroupMember {
private int id;
private int id_account;
private int id_group;
private String role;
}
аутентификация выглядит так:
auth.jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("select username, password, true "
+ " from accounts where username=?")
.authoritiesByUsernameQuery("select role "
+ "from accounts where username=?")
.passwordEncoder(bCryptPasswordEncoder());
некоторый контроллер:
@PostMapping("/addNewGroup")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public ResponseEntity<?> register(@RequestBody Group group){
groupService.addNew(group);
return new ResponseEntity<>(null, HttpStatus.OK);
}
В Аккаунт существует 2 роли:
В GroupMember существует 2 роли:
Если я хочу добавить новую группу, у пользователя должен быть ROLE_ADMIN , который берется со счета.
Пользователь TEST имеет роль ROLE_USER , поэтому он не может добавить новую группу.
Но администратор создает 2 группы, а в GroupMember он дает тестовые роли 2 этим группам:
- in GROUP_1 TEST имеет роль: ROLE_MANAGER
- in GROUP_2 TEST имеет роль: ROLE_MEMBER
Теперь, если TEST имеет ROLE_MANAGER в GROUP_1 , он может добавить новую подгруппу, но эта подгруппа должна иметь в id_group_parent ID от GROUP_1 . Но если TEST хочет добавить новую подгруппу в GROUP_2, он не может этого сделать, потому что там у него есть ROLE_MEMBER .
Как я могу проверить, что пользователь TEST может или не может добавить новую подгруппу в GROUP_1 или GROUP_2 или новую группу вообще самым профессиональным способом с помощью Spring Security?