This is an automated email from the git hooks/post-receive script. New commit to branch feature/permissionPollRestricted in repository pollen. See http://git.chorem.org/pollen.git commit 0077c6baae3c4ba75efea3fa9326526317208e37 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 11:38:49 2014 +0200 add permission for resticted poll when user is connected --- .../services/service/security/SecurityService.java | 115 +++++++++++---------- 1 file changed, 62 insertions(+), 53 deletions(-) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java index b5a652d..546b278 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java @@ -34,16 +34,13 @@ import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; import org.chorem.pollen.persistence.entity.*; +import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.service.PollenServiceSupport; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.util.pagination.PaginationParameter; -import java.util.Calendar; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; /** * TODO @@ -365,53 +362,7 @@ public class SecurityService extends PollenServiceSupport { Set<Poll> polls = getPollDao().findAllFreePolls(); for (Poll poll : polls) { - - permissions.add(createSubjectPermission(PermissionVerb.readPoll, poll)); - permissions.add(createSubjectPermission(PermissionVerb.addVote, poll)); - permissions.add(createSubjectPermission(PermissionVerb.addComment, poll)); - - if (poll.getCommentVisibility() == CommentVisibility.EVERYBODY) { - permissions.add(createSubjectPermission(PermissionVerb.readComment, poll)); - } - - if (poll.getVoteVisibility() == VoteVisibility.EVERYBODY) { - permissions.add(createSubjectPermission(PermissionVerb.readVote, poll)); - } - - if (poll.getResultVisibility() == ResultVisibility.EVERYBODY && (poll.isClosed() || poll.isContinuousResults())) { - permissions.add(createSubjectPermission(PermissionVerb.readPollResult, poll)); - } - - if (poll.isChoiceAddAllowed()) { - permissions.add(createSubjectPermission(PermissionVerb.addChoice, poll)); - } - - // add choices permissions - - List<Choice> choices = getChoiceDao().forPollEquals(poll).findAll(); - if (CollectionUtils.isNotEmpty(choices)) { - for (Choice choice : choices) { - permissions.add(createSubjectPermission(PermissionVerb.readChoice, choice)); - } - } - - // add comment permissions - - List<Comment> comments = getCommentDao().forPollEquals(poll).findAll(); - if (CollectionUtils.isNotEmpty(comments)) { - for (Comment comment : comments) { - permissions.add(createSubjectPermission(PermissionVerb.readComment, comment)); - } - } - - // add vote permissions - - List<Vote> votes = getVoteDao().forPollEquals(poll).findAll(); - if (CollectionUtils.isNotEmpty(votes)) { - for (Vote vote : votes) { - permissions.add(createSubjectPermission(PermissionVerb.readVote, vote)); - } - } + generatePollAccessPermission(permissions, poll); } if (user == null && pollenPrincipal == null) { @@ -438,6 +389,15 @@ public class SecurityService extends PollenServiceSupport { getPollenPrincipalDao().forPollenUserEquals(user).findAll(); principals.addAll(allByPollenUser); + PaginationParameterBean paginationParameter = new PaginationParameterBean(); + paginationParameter.setPageNumber(0); + paginationParameter.setPageSize(-1); + List<Poll> invitedPoll = getPollDao().findAllInvited(user, paginationParameter.toPaginationParameter()).getElements(); + + for (Poll poll : invitedPoll) { + generatePollAccessPermission(permissions, poll); + } + } PrincipalByType principalByType = resolvePrincipals(principals); @@ -507,6 +467,55 @@ public class SecurityService extends PollenServiceSupport { } + protected void generatePollAccessPermission(Set<String> permissions, Poll poll) { + permissions.add(createSubjectPermission(PermissionVerb.readPoll, poll)); + permissions.add(createSubjectPermission(PermissionVerb.addVote, poll)); + permissions.add(createSubjectPermission(PermissionVerb.addComment, poll)); + + if (poll.getCommentVisibility() == CommentVisibility.EVERYBODY) { + permissions.add(createSubjectPermission(PermissionVerb.readComment, poll)); + } + + if (poll.getVoteVisibility() == VoteVisibility.EVERYBODY) { + permissions.add(createSubjectPermission(PermissionVerb.readVote, poll)); + } + + if (poll.getResultVisibility() == ResultVisibility.EVERYBODY && (poll.isClosed() || poll.isContinuousResults())) { + permissions.add(createSubjectPermission(PermissionVerb.readPollResult, poll)); + } + + if (poll.isChoiceAddAllowed()) { + permissions.add(createSubjectPermission(PermissionVerb.addChoice, poll)); + } + + // add choices permissions + + List<Choice> choices = getChoiceDao().forPollEquals(poll).findAll(); + if (CollectionUtils.isNotEmpty(choices)) { + for (Choice choice : choices) { + permissions.add(createSubjectPermission(PermissionVerb.readChoice, choice)); + } + } + + // add comment permissions + + List<Comment> comments = getCommentDao().forPollEquals(poll).findAll(); + if (CollectionUtils.isNotEmpty(comments)) { + for (Comment comment : comments) { + permissions.add(createSubjectPermission(PermissionVerb.readComment, comment)); + } + } + + // add vote permissions + + List<Vote> votes = getVoteDao().forPollEquals(poll).findAll(); + if (CollectionUtils.isNotEmpty(votes)) { + for (Vote vote : votes) { + permissions.add(createSubjectPermission(PermissionVerb.readVote, vote)); + } + } + } + protected PrincipalByType resolvePrincipals(Set<PollenPrincipal> principals) { PrincipalByType principalByType = new PrincipalByType(); -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.