Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge branch 'master' into rhbz788294
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Eng committed Mar 12, 2012
2 parents 8974d0a + e8afa8a commit 5e34fc5
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 14 deletions.
14 changes: 9 additions & 5 deletions server/zanata-model/src/main/java/org/zanata/model/HPerson.java
Expand Up @@ -27,7 +27,6 @@
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
Expand Down Expand Up @@ -103,8 +102,11 @@ public String getEmail()
return email;
}

@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "HProject_Maintainer", joinColumns = @JoinColumn(name = "personId"), inverseJoinColumns = @JoinColumn(name = "projectId"))
/*
* This is a read-only side of the relationship. Changes to this collection are allowed but will not
* be persisted.
*/
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "maintainers")
public Set<HProject> getMaintainerProjects()
{
if (maintainerProjects == null)
Expand Down Expand Up @@ -213,10 +215,12 @@ public boolean isMaintainer(HProject proj)
{
// TODO consider implementing business key equality and using
// getMaintainerProjects().contains(proj)
for (HProject maintProj : getMaintainerProjects())
for (HPerson maintainer : proj.getMaintainers())
{
if (maintProj.getId().equals(proj.getId()))
if (maintainer.getId().equals( this.getId() ))
{
return true;
}
}
return false;
}
Expand Down
12 changes: 12 additions & 0 deletions server/zanata-model/src/main/java/org/zanata/model/HProject.java
Expand Up @@ -112,6 +112,9 @@ public void setHomeContent(String homeContent)
this.homeContent = homeContent;
}

/**
* @see {@link #addMaintainer(HPerson)}
*/
@ManyToMany
@JoinTable(name = "HProject_Maintainer", joinColumns = @JoinColumn(name = "projectId"), inverseJoinColumns = @JoinColumn(name = "personId"))
// @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) // caching affects permission checks in security.drl
Expand All @@ -122,10 +125,19 @@ public Set<HPerson> getMaintainers()
return maintainers;
}

/**
* @see {@link #addMaintainer(HPerson)}
*/
public void setMaintainers(Set<HPerson> maintainers)
{
this.maintainers = maintainers;
}

public void addMaintainer( HPerson maintainer )
{
this.getMaintainers().add(maintainer);
maintainer.getMaintainerProjects().add(this);
}

@ManyToMany
@JoinTable(name = "HProject_Locale", joinColumns = @JoinColumn(name = "projectId"), inverseJoinColumns = @JoinColumn(name = "localeId"))
Expand Down
Expand Up @@ -34,6 +34,7 @@
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Transactional;
import org.jboss.seam.core.Events;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.log.Log;
Expand All @@ -44,7 +45,6 @@
import org.zanata.model.HAccount;
import org.zanata.model.HIterationProject;
import org.zanata.model.HLocale;
import org.zanata.model.HPerson;
import org.zanata.model.HProjectIteration;
import org.zanata.service.LocaleService;

Expand Down Expand Up @@ -129,6 +129,7 @@ public boolean isSlugAvailable(String slug)
}

@Override
@Transactional
public String persist()
{
String retValue = "";
Expand All @@ -138,13 +139,9 @@ public String persist()
if (authenticatedAccount != null)
{
updateOverrideLocales();
HPerson currentPerson = getEntityManager().find(HPerson.class, authenticatedAccount.getPerson().getId());
if (currentPerson != null)
{
getInstance().getMaintainers().add(currentPerson);
retValue = super.persist();
Events.instance().raiseEvent("projectAdded");
}
getInstance().addMaintainer(authenticatedAccount.getPerson());
retValue = super.persist();
Events.instance().raiseEvent("projectAdded");
}
return retValue;
}
Expand Down
14 changes: 13 additions & 1 deletion server/zanata-war/src/main/resources/security.drl
Expand Up @@ -66,7 +66,19 @@ end

******************************************************************************************/

/* admin can create/delete projects (see rule AdminAnything above) */
/* admin can delete projects (see rule AdminAnything above) */

/* Any authenticated user can create a project */
rule CreateProject
no-loop
activation-group "permissions"
when
$project: HProject()
$authenticatedPerson: HPerson()
check: PermissionCheck(target == $project, action == "insert", granted == false )
then
check.grant();
end

/* anyone can read a project */
rule ReadProject
Expand Down

0 comments on commit 5e34fc5

Please sign in to comment.