Add public and default permission at account level.

This commit is contained in:
robin shine 2013-10-13 11:18:03 +08:00
parent 8689b8ec12
commit 4d85f8275a
5 changed files with 48 additions and 4 deletions

View File

@ -1,5 +1,6 @@
package com.pmease.gitop.core.manager;
import java.util.Collection;
import java.util.Set;
import javax.annotation.Nullable;
@ -30,6 +31,8 @@ public interface UserManager extends GenericDao<User> {
*/
@Nullable User find(String userName);
Collection<User> findPublic();
Set<String> getReservedNames();
EntityLoader asEntityLoader();

View File

@ -1,5 +1,6 @@
package com.pmease.gitop.core.manager.impl;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
@ -55,6 +56,11 @@ public class DefaultUserManager extends AbstractGenericDao<User> implements User
return find(new Criterion[]{Restrictions.eq("name", userName)});
}
@Override
public Collection<User> findPublic() {
return query(new Criterion[]{Restrictions.eq("publiclyAccessible", true)});
}
@Override
public EntityLoader asEntityLoader() {
return new EntityLoader() {

View File

@ -46,6 +46,11 @@ public class User extends AbstractUser implements ProtectedObject {
private boolean admin;
private boolean publiclyAccessible;
@Column(nullable=false)
private GeneralOperation defaultAuthorizedOperation = GeneralOperation.NO_ACCESS;
@OneToMany(mappedBy="user")
private Collection<Membership> memberships = new ArrayList<Membership>();
@ -221,18 +226,48 @@ public class User extends AbstractUser implements ProtectedObject {
if (projectPermission.implies(objectPermission))
return true;
}
for (User each: Gitop.getInstance(UserManager.class).query()) {
ObjectPermission userPermission = new ObjectPermission(each, each.getDefaultAuthorizedOperation());
if (userPermission.implies(objectPermission))
return true;
}
}
// check if is public access
// check if is public access to projects
for (Project each: Gitop.getInstance(ProjectManager.class).findPublic()) {
ObjectPermission projectPermission = new ObjectPermission(each, GeneralOperation.READ);
if (projectPermission.implies(objectPermission))
return true;
}
// check if is public access to accounts
for (User each: Gitop.getInstance(UserManager.class).findPublic()) {
ObjectPermission userPermission = new ObjectPermission(each, GeneralOperation.READ);
if (userPermission.implies(objectPermission))
return true;
}
}
return false;
}
public boolean isPubliclyAccessible() {
return publiclyAccessible;
}
public void setPubliclyAccessible(boolean publiclyAccessible) {
this.publiclyAccessible = publiclyAccessible;
}
public GeneralOperation getDefaultAuthorizedOperation() {
return defaultAuthorizedOperation;
}
public void setDefaultAuthorizedOperation(
GeneralOperation defaultAuthorizedOperation) {
this.defaultAuthorizedOperation = defaultAuthorizedOperation;
}
public boolean isRoot() {
return Gitop.getInstance(UserManager.class).getRootUser().equals(this);
}

View File

@ -53,7 +53,7 @@ public class ObjectPermission implements Permission {
}
public static ObjectPermission ofUserAdmin(User user) {
return new ObjectPermission(user, GeneralOperation.ADMINISTRATION);
return new ObjectPermission(user, GeneralOperation.ADMIN);
}
public static ObjectPermission ofUserRead(User user) {
@ -65,7 +65,7 @@ public class ObjectPermission implements Permission {
}
public static ObjectPermission ofProjectAdmin(Project project) {
return new ObjectPermission(project, GeneralOperation.ADMINISTRATION);
return new ObjectPermission(project, GeneralOperation.ADMIN);
}
public static ObjectPermission ofProjectRead(Project project) {

View File

@ -26,7 +26,7 @@ public enum GeneralOperation implements PrivilegedOperation {
}
},
ADMINISTRATION("Administration") {
ADMIN("Admin") {
@Override
public boolean can(PrivilegedOperation operation) {