/branches/v3/impl/src/java/pt/estgp/estgweb/services/users/UserRoleConfigService.java |
---|
478,9 → 478,11 |
"user.role.courseValidateProgramTPB=Comissão de Curso de Tecnologias de Produção de Biocombustíveis\n"+ |
"user.role.board.institution=Board de Direcção do Instituto Politecnico\n"+ |
"user.role.repositoryDocs=Administração do Repositório Digital\n"+ |
"user.role.repositoryDeposit=Depositante do Repositório Digital\n"+ |
//ESCOLAS |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/data/repositorydocuments/RepositoryDocumentService.java |
---|
362,7 → 362,7 |
collections.add((RepositoryDocumentCollectionImpl) col); |
collections.addAll(loadChildsOrderedAsTree(col)); |
} |
return RepositoryDocumentCollectionImpl.toJsonArray(collections); |
return RepositoryDocumentCollectionImpl.toJsonArraySimpleFields(collections); |
} |
private ArrayList<RepositoryDocumentCollectionImpl> loadChildsOrderedAsTree(RepositoryDocumentCollection rootCol) |
405,7 → 405,6 |
DaoFactory.getRepositoryDocumentInterfaceDaoImpl().delete(persistent); |
} |
public void saveRepositoryInterfaceData(Long id,String dataJson, UserSession userSession) throws IOException, TransformationException, JSONException, AccessDeniedException, ServiceException { |
RepositoryInterface repositoryInterface = RepositoryInterface.loadFromJson(dataJson); |
426,6 → 425,26 |
persistent.setRepositoryInterface(repositoryInterface); |
} |
public void addManagerToCollection(long collectionId, long managerId, UserSession sess) |
{ |
RepositoryDocumentCollection col = DaoFactory.getRepositoryDocumentCollectionDaoImpl().get(collectionId); |
User u = DaoFactory.getUserDaoImpl().get(managerId); |
col.getCollectionManagers().add((UserImpl) u); |
} |
public void removeManagerInCollection(long collectionId, long managerId, UserSession sess) |
{ |
RepositoryDocumentCollection col = DaoFactory.getRepositoryDocumentCollectionDaoImpl().get(collectionId); |
for(User user : col.getCollectionManagers()) |
{ |
if(user.getId() == managerId) |
{ |
col.getCollectionManagers().remove(user); |
break; |
} |
} |
} |
public static void main(String[] args) throws TransformationException, JSONException, IOException |
{ |
AbstractDao.getCurrentSession().beginTransaction(); |
/branches/v3/impl/src/java/pt/estgp/estgweb/services/data/repositorydocuments/interfaces/InterfaceBlock.java |
---|
13,7 → 13,9 |
String type = "block"; |
String title; |
String description; |
//HELPER para interface |
boolean showTitle = true; |
boolean showDescription = false; |
225,6 → 227,8 |
return "block"; |
} |
public void setType(String type){} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/domain/RepositoryDocumentCollectionImpl.java |
---|
25,15 → 25,39 |
static Genson genson; |
static Genson gensonSimpleFields; |
static { |
Genson.Builder gensonBuilder = new Genson.Builder() |
.exclude(Object.class) |
.include(RepositoryDocumentCollectionImpl.class) |
.include(String.class) |
.include("name", RepositoryDocumentCollection.class) |
.include("description",RepositoryDocumentCollection.class) |
.include("legacyUrl", RepositoryDocumentCollection.class) |
.include("treeName", RepositoryDocumentCollection.class) |
.include("pathName", RepositoryDocumentCollection.class) |
.include("treeHiffens", RepositoryDocumentCollection.class) |
.include("collectionManagers", RepositoryDocumentCollection.class) |
.include("id",UserImpl.class) |
.include("name",UserImpl.class) |
.include("sigesCode",SigesUserImpl.class) |
.exclude("parent", RepositoryDocumentCollection.class); |
genson = gensonBuilder.create(); |
Genson.Builder gensonBuilderSimpleFields = new Genson.Builder() |
.exclude(Object.class) |
.include(RepositoryDocumentCollectionImpl.class) |
.include("name", RepositoryDocumentCollection.class) |
.include("description",RepositoryDocumentCollection.class) |
.include("legacyUrl", RepositoryDocumentCollection.class) |
.include("treeName", RepositoryDocumentCollection.class) |
.include("pathName", RepositoryDocumentCollection.class) |
.include("treeHiffens", RepositoryDocumentCollection.class) |
.exclude("parent", RepositoryDocumentCollection.class); |
gensonSimpleFields = gensonBuilderSimpleFields.create(); |
} |
public String toJson() throws IOException, TransformationException |
{ |
53,6 → 77,10 |
return new JSONArray(genson.serialize(collections)); |
} |
public static JSONArray toJsonArraySimpleFields(List<RepositoryDocumentCollectionImpl> collections) throws IOException, TransformationException, JSONException { |
return new JSONArray(gensonSimpleFields.serialize(collections)); |
} |
public static RepositoryDocumentCollectionImpl loadFromJson(String json) throws IOException, TransformationException { |
return genson.deserialize(json, RepositoryDocumentCollectionImpl.class); |
} |
86,5 → 114,27 |
} |
public void setTreeName(String name) |
{} |
public boolean isManager(UserSession userSession) |
{ |
if(userSession.getUser() == null) |
return false; |
return checkCollectionManagerInTree(userSession.getUser()); |
} |
private boolean checkCollectionManagerInTree(User u) |
{ |
if(getCollectionManagers() != null) |
{ |
for(User manager :getCollectionManagers()) |
{ |
if(manager.getId() == u.getId()) |
return true; |
} |
return getParent() != null && getParent().checkCollectionManagerInTree(u); |
} |
return false; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/filters/filters/CheckRepositoryCollectionManager.java |
---|
New file |
0,0 → 1,94 |
package pt.estgp.estgweb.filters.filters; |
import org.apache.log4j.Logger; |
import org.json.JSONArray; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.domain.RepositoryDocument; |
import pt.estgp.estgweb.domain.RepositoryDocumentCollectionImpl; |
import pt.estgp.estgweb.domain.RepositoryDocumentImpl; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.filters.chains.AdminControlFilter; |
import pt.estgp.estgweb.filters.exceptions.NeedAuthenticationException; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.utl.ist.berserk.ServiceRequest; |
import pt.utl.ist.berserk.ServiceResponse; |
import pt.utl.ist.berserk.logic.filterManager.FilterParameters; |
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException; |
public class CheckRepositoryCollectionManager extends AdminControlFilter { |
private static final Logger logger = Logger.getLogger(CheckRepositoryCollectionManager.class); |
private static final String ALL_ROLE = ConfigProperties.getProperty("user.super"); |
public void execute(ServiceRequest request, ServiceResponse response) |
throws FilterException, Exception |
{ |
} |
public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, Exception |
{ |
UserSession userSession = (UserSession) request.getServiceParameters().getParameter(Globals.USER_SESSION_KEY); |
Long targetCollectionId = (Long) request.getServiceParameters().getParameter("newCollectionId"); |
JSONArray docsIds = (JSONArray) request.getServiceParameters().getParameter("jsonArrayDocumentsIds"); |
String docJson = (String) request.getServiceParameters().getParameter("docJson"); |
if(userSession.getUser() == null) |
{ |
logger.info("try access restricted area:" + request.getRequester()); |
throw new NeedAuthenticationException(); |
} |
if(userSession.getUser().isSuperuserOrAdmin()) |
return; |
if(docJson != null) |
{ |
RepositoryDocumentImpl view = RepositoryDocumentImpl.loadFromJson(docJson); |
targetCollectionId = view.getCollection().getId(); |
if(view.getCollection() == null || view.getCollection().getId() <= 0) |
{ |
throw new NotAuthorizedException("Não pode depositar documentos sem colecção"); |
} |
Long id = view.getId(); |
checkDocAndTargetCollectionManager(targetCollectionId, id,userSession); |
return; |
} |
else if(docsIds != null && targetCollectionId != null) |
{ |
for(int i = 0; i < docsIds.length(); i++) |
{ |
long docId = docsIds.getLong(i); |
checkDocAndTargetCollectionManager(targetCollectionId, docId,userSession); |
} |
return; |
} |
throw new NotAuthorizedException("Não tem permissão para fazer esta operação"); |
} |
public void checkDocAndTargetCollectionManager(long targetColId, Long id,UserSession sess) throws NotAuthorizedException { |
if(id != null && id > 0) |
{ |
RepositoryDocument persistentDoc = DaoFactory.getRepositoryDocumentDaoImpl().get(id); |
if(persistentDoc.getCollection() != null) |
{ |
boolean isManager = persistentDoc.getCollection().isManager(sess); |
if(!isManager) |
throw new NotAuthorizedException("O seu perfil não lhe permite atualizar documentos da colecção " + persistentDoc.getCollection().getName()); |
} |
else |
{ |
throw new NotAuthorizedException("Não tem permissão para fazer esta operação, este documento necessita de colecção"); |
} |
} |
RepositoryDocumentCollectionImpl targetCollection = (RepositoryDocumentCollectionImpl) DaoFactory.getRepositoryDocumentCollectionDaoImpl().get(targetColId); |
boolean isManager = targetCollection.isManager(sess); |
if(!isManager) |
throw new NotAuthorizedException("O seu perfil não lhe permite atualizar documentos da colecção " + targetCollection.getName()); |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/repositorydocs/RepositoryDocController.java |
---|
35,7 → 35,7 |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
String[] names = new String[]{"docJson"}; |
Object[] args = new Object[]{docJson,uploadedProvisorios}; |
JSONObject persistent = (JSONObject) sm.execute(RequestUtils.getRequester(request, response), "SaveRepositoryDocument", args, names); |
if(persistent.get("title") != null) |
52,7 → 52,7 |
JSONObject similar = new JSONObject(); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
String[] names = new String[]{"docJson"}; |
Object[] args = new Object[]{docJson}; |
JSONArray found = (JSONArray) sm.execute(RequestUtils.getRequester(request, response), "CheckRepositoryDocumentExistence", args, names); |
similar.put("found",found); |
103,7 → 103,7 |
JSONArray documentIds = new JSONArray(request.getParameter("documentIds")); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
String[] names = new String[]{"newCollectionId","jsonArrayDocumentsIds"}; |
Object[] args = new Object[]{collectionId,documentIds}; |
sm.execute(RequestUtils.getRequester(request, response), "ChangeDocumentCollection", args, names); |
return true; |
510,5 → 510,30 |
return sectionsObj; |
} |
public boolean addManagerToCollection(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable |
{ |
Long collectionId = Long.parseLong(request.getParameter("collectionId")); |
Long managerId = Long.parseLong(request.getParameter("managerId")); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{collectionId,managerId}; |
sm.execute(RequestUtils.getRequester(request, response), "RepositoryDocumentsAddManagerToCollection", args, names); |
addMessageAsString(request,"Utilizador adicionado com sucesso"); |
return true; |
} |
public boolean removeManagerInCollection(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Throwable |
{ |
Long collectionId = Long.parseLong(request.getParameter("collectionId")); |
Long managerId = Long.parseLong(request.getParameter("managerId")); |
IServiceManager sm = ServiceManager.getInstance(); |
String[] names = new String[]{}; |
Object[] args = new Object[]{collectionId,managerId}; |
sm.execute(RequestUtils.getRequester(request, response), "RepositoryDocumentsRemoveManagerInCollection", args, names); |
addMessageAsString(request,"Utilizador removido com sucesso"); |
return true; |
} |
} |
/branches/v3/impl/src/java/pt/estgp/estgweb/web/controllers/utils/AbstractWidgetAjaxController.java |
---|
7,6 → 7,7 |
import org.json.JSONException; |
import org.json.JSONObject; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException; |
import javax.servlet.ServletException; |
import javax.servlet.http.HttpServletRequest; |
48,6 → 49,7 |
try |
{ |
String serviceJson = request.getParameter("serviceJson"); |
logger.info("Calling abstract widget service: " + serviceJson); |
Method serviceChild = this.getClass().getMethod(serviceJson,new Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); |
59,12 → 61,27 |
} |
catch(InvocationTargetException e) |
{ |
prepareError(e.getCause(),request,response); |
Throwable cause = e; |
if(e.getTargetException() != null) |
{ |
cause = e.getTargetException(); |
if(e.getTargetException().getCause() != null) |
cause = e.getTargetException().getCause(); |
} |
prepareError(cause,request,response); |
return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
} |
catch(Throwable e) |
{ |
prepareError(e,request,response); |
if(e instanceof FilterChainFailedException) |
{ |
logger.error(e,e); |
} |
else |
{ |
prepareError(e,request,response); |
} |
return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
} |
} |
79,6 → 96,7 |
try |
{ |
String serviceJson = request.getParameter("serviceJson"); |
logger.info("Calling abstract widget service: " + serviceJson); |
Method serviceChild = this.getClass().getMethod(serviceJson,new Class[]{ActionForm.class,HttpServletRequest.class,HttpServletResponse.class}); |
Boolean responseBoolean = (Boolean) serviceChild.invoke(this, form, request, response); |
115,12 → 133,26 |
} |
catch(InvocationTargetException e) |
{ |
prepareError(e.getCause(),request,response); |
Throwable cause = e.getCause(); |
if(e.getTargetException() != null) |
{ |
cause = e.getTargetException(); |
if(e.getTargetException().getCause() != null) |
cause = e.getTargetException().getCause(); |
} |
prepareError(cause,request,response); |
return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
} |
catch(Throwable e) |
{ |
prepareError(e,request,response); |
if(e instanceof FilterChainFailedException) |
{ |
logger.error(e,e); |
} |
else |
{ |
prepareError(e,request,response); |
} |
return mapping.findForward("JSON_WidgetAjax_RESPONSE_ERROR"); |
} |