use of org.activityinfo.server.database.hibernate.entity.Folder in project activityinfo by bedatadriven.
the class GetUsersHandler method execute.
@Override
public CommandResult execute(GetUsers cmd, User currentUser) {
Database db = em.getReference(Database.class, cmd.getDatabaseId());
UserPermission currentUserPermission = PermissionOracle.using(em).getPermissionByUser(db, currentUser);
assertAuthorized(currentUserPermission);
String whereClause = "up.database.id = :dbId and " + "up.user.id <> :currentUserId and " + "up.allowView = true";
if (!currentUserPermission.isAllowManageAllUsers()) {
whereClause += " and up.partner.id = " + currentUserPermission.getPartner().getId();
}
TypedQuery<UserPermission> query = em.createQuery("select up from UserPermission up where " + whereClause + " " + composeOrderByClause(cmd), UserPermission.class).setParameter("dbId", cmd.getDatabaseId()).setParameter("currentUserId", currentUser.getId());
List<Folder> folders = em.createQuery("select f from Folder f where f.database.id = :dbId", Folder.class).setParameter("dbId", cmd.getDatabaseId()).getResultList();
Map<ResourceId, Folder> folderMap = new HashMap<>();
for (Folder folder : folders) {
folderMap.put(CuidAdapter.folderId(folder.getId()), folder);
}
if (cmd.getOffset() > 0) {
query.setFirstResult(cmd.getOffset());
}
if (cmd.getLimit() > 0) {
query.setMaxResults(cmd.getLimit());
}
List<UserPermissionDTO> models = new ArrayList<>();
for (UserPermission perm : query.getResultList()) {
UserPermissionDTO dto = new UserPermissionDTO();
dto.setEmail(perm.getUser().getEmail());
dto.setName(perm.getUser().getName());
dto.setOrganization(perm.getUser().getOrganization());
dto.setJobtitle(perm.getUser().getJobtitle());
dto.setAllowDesign(perm.isAllowDesign());
dto.setAllowView(perm.isAllowView());
dto.setAllowViewAll(perm.isAllowViewAll());
dto.setAllowEdit(perm.isAllowEdit());
dto.setAllowEditAll(perm.isAllowEditAll());
dto.setAllowManageUsers(perm.isAllowManageUsers());
dto.setAllowManageAllUsers(perm.isAllowManageAllUsers());
dto.setPartner(new PartnerDTO(perm.getPartner().getId(), perm.getPartner().getName()));
dto.setFolderLimitation(!Strings.isNullOrEmpty(perm.getModel()));
dto.setFolders(folderList(folderMap, perm));
models.add(dto);
}
return new UserResult(models, cmd.getOffset(), queryTotalCount(cmd, currentUser, whereClause));
}
use of org.activityinfo.server.database.hibernate.entity.Folder in project activityinfo by bedatadriven.
the class GetUsersHandler method folderList.
private List<FolderDTO> folderList(Map<ResourceId, Folder> folderMap, UserPermission perm) {
if (Strings.isNullOrEmpty(perm.getModel())) {
// Include all folders, as user has access to all
List<FolderDTO> folderList = new ArrayList<>(folderMap.size());
folderMap.values().forEach(folder -> folderList.add(createFolderDTO(folder)));
return folderList;
}
try {
UserPermissionModel model = UserPermissionModel.fromJson(Json.parse(perm.getModel()));
List<FolderDTO> folderList = new ArrayList<>();
for (GrantModel grantModel : model.getGrants()) {
Folder folder = folderMap.get(grantModel.getResourceId());
if (folder != null) {
folderList.add(createFolderDTO(folder));
}
}
return folderList;
} catch (Exception e) {
LOGGER.log(Level.SEVERE, "Permissions model: " + perm.getModel());
LOGGER.log(Level.SEVERE, "Failed to parse permissions model", e);
return null;
}
}
Aggregations