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 43fe2364666957f525ea3b47ed39e839b45c38ad Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Mon Aug 4 16:54:47 2014 +0200 Add PollenPrincipal in VoterListMember, check permission for restricted poll. --- .../pollen/persistence/entity/PollTopiaDao.java | 25 +++++++++++++++++- pollen-persistence/src/main/xmi/pollen.zargo | Bin 20479 -> 20954 bytes .../pollen/services/bean/VoterListMemberBean.java | 12 ++++++--- .../pollen/services/service/VoterListService.java | 27 ++++++++++++------- .../services/service/security/SecurityService.java | 6 +++++ pollen-ui-angular/src/main/webapp/js/app.js | 8 +++--- .../src/main/webapp/js/controllers/pollCtrl.js | 29 ++++++++++++++------- 7 files changed, 81 insertions(+), 26 deletions(-) diff --git a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java index d9b1532..cfbec52 100644 --- a/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java +++ b/pollen-persistence/src/main/java/org/chorem/pollen/persistence/entity/PollTopiaDao.java @@ -50,7 +50,7 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { topiaDaoSupplier.getDao(VoterListMember.class, VoterListMemberTopiaDao.class); List<VoterListMember> voterListMembers = - voterListMemberDao.forEquals(VoterListMember.PROPERTY_EMAIL, user.getEmail()).findAll(); + voterListMemberDao.forEquals(VoterListMember.PROPERTY_MEMBER + "." + PollenPrincipal.PROPERTY_POLLEN_USER, user).findAll(); VoterListTopiaDao voterListDao = topiaDaoSupplier.getDao(VoterList.class, VoterListTopiaDao.class); @@ -85,6 +85,29 @@ public class PollTopiaDao extends AbstractPollTopiaDao<Poll> { } + public Set<Poll> findByVoterListMemberPermission(PollenToken token) { + + VoterListMemberTopiaDao voterListMemberDao = + topiaDaoSupplier.getDao(VoterListMember.class, VoterListMemberTopiaDao.class); + + List<VoterListMember> voterListMembers = + voterListMemberDao.forEquals(VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_PERMISSION+"."+PollenToken.PROPERTY_TOKEN, token.getToken()).findAll(); + + VoterListTopiaDao voterListDao = topiaDaoSupplier.getDao(VoterList.class, VoterListTopiaDao.class); + + Set<Poll> polls = new HashSet<Poll>(); + for (VoterListMember member : voterListMembers) { + polls.add( + voterListDao.forEquals( + VoterList.PROPERTY_TOPIA_ID, + member.getVoterList().getTopiaId() + ).findUnique().getPoll() + ); + } + + return polls; + } + @Override public void delete(Poll entity) { diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 8f51a6f..b32f5a8 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java index c9d630e..80b8932 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/VoterListMemberBean.java @@ -46,8 +46,10 @@ public class VoterListMemberBean extends PollenBean<VoterListMember> { public void fromEntity(VoterListMember entity) { setEntityId(entity.getTopiaId()); - setName(entity.getName()); - setEmail(entity.getEmail()); + if (entity.getMember() != null) { + setName(entity.getMember().getName()); + setEmail(entity.getMember().getEmail()); + } setWeight(entity.getWeight()); } @@ -57,8 +59,10 @@ public class VoterListMemberBean extends PollenBean<VoterListMember> { VoterListMember entity = new VoterListMemberImpl(); entity.setTopiaId(getEntityId()); - entity.setEmail(getEmail()); - entity.setName(getName()); + if (entity.getMember() != null) { + entity.getMember().setEmail(getEmail()); + entity.getMember().setName(getName()); + } entity.setWeight(getWeight()); return entity; diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java index 327b8af..1d74c3e 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/VoterListService.java @@ -416,12 +416,21 @@ public class VoterListService extends PollenServiceSupport { } else { toSave = getVoterListMemberDao().create(); + + PollenPrincipal member = getPollenPrincipalDao().forEmailEquals(voterListMember.getEmail()).findUniqueOrNull(); + + if (member == null) { + member = getSecurityService().generatePollenPrincipal(); + } + + toSave.setMember(member); + toSave.setVoterList(voterList); } - toSave.setName(voterListMember.getName()); - toSave.setEmail(getCleanMail(voterListMember.getEmail())); + toSave.getMember().setName(voterListMember.getName()); + toSave.getMember().setEmail(getCleanMail(voterListMember.getEmail())); toSave.setWeight(voterListMember.getWeight()); return toSave; @@ -499,32 +508,32 @@ public class VoterListService extends PollenServiceSupport { continue; } - voterListMemberNames.add(voterListMember1.getName()); - voterListMemberEmails.add(voterListMember1.getEmail()); + voterListMemberNames.add(voterListMember1.getMember().getName()); + voterListMemberEmails.add(voterListMember1.getMember().getEmail()); } } String voterListMemberName = voterListMember.getName(); - boolean nameNotblank = checkNotBlank(errors, VoterListMember.PROPERTY_NAME, voterListMemberName, "member name can not be empty"); + boolean nameNotblank = checkNotBlank(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_NAME, voterListMemberName, "member name can not be empty"); if (nameNotblank) { boolean nameAdded = voterListMemberNames.add(voterListMemberName); - check(errors, VoterListMember.PROPERTY_NAME, nameAdded, "member name already used in this list"); + check(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_NAME, nameAdded, "member name already used in this list"); } String voterListMemberEmail = getCleanMail(voterListMember.getEmail()); - boolean emailNotBlank = checkNotBlank(errors, VoterListMember.PROPERTY_EMAIL, voterListMemberEmail, "member email can not be empty"); + boolean emailNotBlank = checkNotBlank(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_EMAIL, voterListMemberEmail, "member email can not be empty"); if (emailNotBlank) { - checkValidEmail(errors, VoterListMember.PROPERTY_EMAIL, voterListMemberEmail, "member email is not valid"); + checkValidEmail(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_EMAIL, voterListMemberEmail, "member email is not valid"); boolean emailAdded = voterListMemberEmails.add(voterListMemberEmail); - check(errors, VoterListMember.PROPERTY_EMAIL, emailAdded, "member email already used in this list"); + check(errors, VoterListMember.PROPERTY_MEMBER+"."+PollenPrincipal.PROPERTY_EMAIL, emailAdded, "member email already used in this list"); } 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 546b278..0a1d197 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 @@ -380,6 +380,12 @@ public class SecurityService extends PollenServiceSupport { if (pollenPrincipal != null) { principals.add(pollenPrincipal); + + Set<Poll> invitedPoll = getPollDao().findByVoterListMemberPermission(pollenPrincipal.getPermission()); + + for (Poll poll : invitedPoll) { + generatePollAccessPermission(permissions, poll); + } } if (user != null) { diff --git a/pollen-ui-angular/src/main/webapp/js/app.js b/pollen-ui-angular/src/main/webapp/js/app.js index e286736..89b1812 100644 --- a/pollen-ui-angular/src/main/webapp/js/app.js +++ b/pollen-ui-angular/src/main/webapp/js/app.js @@ -61,9 +61,11 @@ angular.module('pollen', ['pollenDirective', 'pollenServices', 'ngRoute', 'Polle $routeProvider.when('/', {templateUrl: './partials/home.html', controller: "HomeCtrl"}) .when('/poll/create/:tab?', {templateUrl: './partials/poll.html', controller: "PollCreateCtrl"}) .when('/poll/edit/:pollId/:pollToken?/:tab?', {templateUrl: './partials/poll.html', controller:"PollCtrl"}) - .when('/poll/vote/:pollId/:voteToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) - .when('/poll/result/:pollId/:token?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) - .when('/poll/comment/:pollId/:commentToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/vote/:pollId/:pollToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/vote/:pollId/:pollToken?/vote/:voteToken', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/result/:pollId/:pollToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/comment/:pollId/:pollToken?', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) + .when('/poll/comment/:pollId/:pollToken?/comment/:commentToken', {templateUrl: './partials/poll.html', controller :"PollCtrl"}) .when('/poll/list/:cmd?', {templateUrl: './partials/poll-list.html', controller :"PollListCtrl"}) .when('/user/list', {templateUrl: './partials/user-admin-list.html', controller:"UserListCtrl"}) .when('/user/register', {templateUrl: './partials/user-register.html', controller:"UserRegisterCtrl"}) diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js index faa9b13..b9ebaab 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -120,16 +120,15 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr var pollDeferred = $scope.pollDeferred; Poll.get({pollId:$routeParams.pollId, permission:$scope.globalVariables.pollToken}, function (poll) { $scope.data.poll = poll; - $scope.globalVariables.pollToken = poll.permission; - pollDeferred.resolve('read-write poll'); + pollDeferred.resolve('get poll'); }, function (error) { - Poll.get({pollId:$routeParams.pollId}, function (poll) { + Poll.get({pollId:$routeParams.pollId, permission:$routeParams.voteToken}, function (poll) { $scope.data.poll = poll; // clean permission SessionStorage.remove('pollToken'); delete $scope.globalVariables.pollToken; - pollDeferred.resolve('read-only poll') + pollDeferred.resolve('bad token') }, function (error) { pollDeferred.reject(error); }); @@ -1158,7 +1157,7 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr }); } - PollVote.add({pollId:$routeParams.pollId}, sendVote, function (returnRequest) { + PollVote.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.pollToken}, sendVote, function (returnRequest) { $scope.data.vote.id = returnRequest.id; $scope.data.vote.permission = returnRequest.permission; @@ -1175,17 +1174,23 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr $scope.data.votants.push(newVote); }) + var redirect = '/poll/vote/' + $routeParams.pollId; + if (angular.isDefined($scope.globalVariables.pollToken)) { + redirect += '/' + $scope.globalVariables.pollToken; + } + redirect += '/vote/' + returnRequest.permission; + $rootScope.$broadcast('newInfo', $filter('translate')('vote.added.printLink', {url: '<input type="text" class="form-control" value="' + - $scope.globalVariables.baseUrl+'#/poll/vote/'+$routeParams.pollId+'/'+ returnRequest.permission + + $scope.globalVariables.baseUrl+'#' + redirect + '" readonly />'}) , -1); $rootScope.$broadcast('newSuccess', 'vote.added'); initVote(); - $location.url('/poll/vote/'+$routeParams.pollId+'/'+ returnRequest.permission); + $location.url(redirect); }, function (error) { if (angular.isDefined(error.data["voter.name"])) { $scope.data.vote.restError = { voterName : error.data["voter.name"]}; @@ -1417,14 +1422,20 @@ angular.module('pollControllers', ['ngRoute', 'pollenServices', 'pascalprecht.tr // save Permission $scope.commentToken = data.permission; + var redirect = '/poll/comment/' + $routeParams.pollId; + if (angular.isDefined($scope.globalVariables.pollToken)) { + redirect += '/' + $scope.globalVariables.pollToken; + } + redirect += '/comment/' + data.permission; + $rootScope.$broadcast('newInfo', $filter('translate')('comment.added.printLink', {url : '<input type="text" class="form-control" value="' + - $scope.globalVariables.baseUrl+'#/poll/comment/'+$routeParams.pollId+'/'+data.permission + + $scope.globalVariables.baseUrl+'#' + redirect + '" readonly />' }) , -1); - $location.url('/poll/comment/'+$routeParams.pollId+'/'+data.permission); + $location.url(redirect); // reload comments if ($scope.data.commentsPagination.desc) { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.