package fr.enseirbmatmeca.apms.spring.security;
import java.util.ArrayList;
import java.util.List;
import org.springframework.dao.DataAccessException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import fr.enseirbmatmeca.apms.spring.model.project.Project;
import fr.enseirbmatmeca.apms.spring.model.user.User;
import fr.enseirbmatmeca.apms.spring.service.UserManager;
public class ConstantRoleUserService implements UserDetailsService {
// ROLES
public static final String ADMINISTRATOR = "ROLE_ADMINISTRATOR";
public static final String USER = "ROLE_USER";
private String name;
protected String getName() {
return this.name;
}
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
this.name = username;
//TODO : si l'utilisateur n'existe pas, on l'enregistre dans la base de données à partir des informations du LDAP
final String ROLE = USER;
return new MyUserDetails() {
public ArrayList<GrantedAuthority> getAuthorities() {
ArrayList<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
GrantedAuthority authority = new GrantedAuthority() {
public String getAuthority() {
//TODO : contacter la base de données et retourner le role (admin ou user) en fonction du login
return ROLE;
}
};
list.add(authority);
return list;
};
public String getPassword() {
return null;
}
public String getUsername() {
return getName();
}
public boolean isAccountNonExpired() {
return true;
}
public boolean isAccountNonLocked() {
return true;
}
public boolean isCredentialsNonExpired() {
return true;
}
public boolean isEnabled() {
return true;
}
public List<ProjectRole> getListProjectRole(String idProject, UserManager userManager) {
List<ProjectRole> listProjectRole = null;
if (ROLE.equals(USER)){
User user = new User();
user.setLogin(getUsername());
Project project = new Project();
project.setId(idProject);
//listProjectRole = userManager.getProjectRoles(user, project);
return new ArrayList<ProjectRole>();
}else if (ROLE.equals(ADMINISTRATOR)){
// pas besoin de retourner une liste de projet car l'admin peut acc�der � tout
return null;
}
return listProjectRole;
}
};
}
}