Spring аутентификация безопасности в группах - PullRequest
0 голосов
/ 25 августа 2018

Я смоделирую вам некоторую ситуацию, используя упрощенные сущности, затем задам вопрос.

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 роли:

  • ROLE_ADMIN
  • ROLE_USER

В GroupMember существует 2 роли:

  • ROLE_MANAGER
  • ROLE_MEMBER

Если я хочу добавить новую группу, у пользователя должен быть 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...