Поскольку уже имеется админка с ролями и привилегиями то ребром стоит вопрос как этим воспользоваться. Имеется ввиду какой в Java Spring предлагается механизм использования привилегий. Тут об этом немного сказано. Но я так толком ничего и не понял.
Задача вроде несложная. Понимаю так, что необходимо в методе контроллера, который отрисовывает какую-либо страницу, в атрибуты модели запихнуть список привилегий авторизованного пользователя, для последующего использования их собственно в jsp для запрещения (разрешения) чего-то и т. п. типа так
<sec:authorize access="hasPermission('access_document_management')
Или может метод hasPermission сразу может быть доступен в jsp.
Поясните пожалуйста в нескольких словах, кому не лень, механизм использования привилегий завязанных на ролях и пользователях.
Пока сделано следующее:
1. Создан public class CustomUserDetailsService implements UserDetailsService
@Service("customUserDetailsService")
@Transactional
public class CustomUserDetailsService implements UserDetailsService{
static final Logger logger = LoggerFactory.getLogger(CustomUserDetailsService.class);
@Autowired
private UserService userService;
@Transactional(readOnly=true)
public UserDetails loadUserByUsername(String ssoId)
throws UsernameNotFoundException {
User user = userService.findBySSO(ssoId);
logger.info("User : {}", user);
if(user==null){
logger.info("User not found");
throw new UsernameNotFoundException("Username not found");
}
return new org.springframework.security.core.userdetails.User(user.getSsoId(), user.getPassword(),
true, true, true, true, getGrantedAuthorities(user));
}
private List<GrantedAuthority> getGrantedAuthorities(User user){
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for(UserProfile userProfile : user.getUserProfiles()){
logger.info("UserProfile : {}", userProfile);
authorities.add(new SimpleGrantedAuthority("ROLE_"+userProfile.getType()));
}
logger.info("authorities : {}", authorities);
return authorities;
}
private Collection<? extends GrantedAuthority> getAuthorities(
Collection<UserProfile> userProfiles) {
return getGrantedAuthorities(getUserPermissions(userProfiles));
}
private List<String> getUserPermissions (Collection<UserProfile> userProfiles) {
List<String> userPermissions = new ArrayList<>();
List<UserPermission> collection = new ArrayList<>();
for (UserProfile userProfile : userProfiles) {
collection.addAll(userProfile.getUserPermissions());
}
for (UserPermission item : collection) {
userPermissions.add(item.getTitle());
}
return userPermissions;
}
private List<GrantedAuthority> getGrantedAuthorities(List<String> userPermissions) {
List<GrantedAuthority> authorities = new ArrayList<>();
for (String userPermission : userPermissions) {
authorities.add(new SimpleGrantedAuthority(userPermission));
}
return authorities;
}
}
Что дальше смутно все представляю...