From fe40b0bcd65a854061c784664cc812f24093b2f9 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 10 Mar 2015 08:43:27 +0100 Subject: [PATCH] external user permissions --- app/coffee/modules/admin/roles.coffee | 59 +++++++++++++++++++---- app/partials/admin/admin-roles.jade | 4 +- app/styles/modules/admin/admin-roles.scss | 6 +++ 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/app/coffee/modules/admin/roles.coffee b/app/coffee/modules/admin/roles.coffee index b14effb2..693ae80c 100644 --- a/app/coffee/modules/admin/roles.coffee +++ b/app/coffee/modules/admin/roles.coffee @@ -64,16 +64,36 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil loadProject: -> return @rs.projects.get(@scope.projectId).then (project) => @scope.project = project + @scope.$emit('project:loaded', project) @scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable)) return project + loadExternalUserRole: (roles) -> + roles = roles.map (role) -> + role.external_user = false + + return role + + public_permission = { + "name": "External User", + "permissions": @scope.project.public_permissions, + "external_user": true + } + + roles.push(public_permission) + + return roles + loadRoles: -> - return @rs.roles.list(@scope.projectId).then (data) => - @scope.roles = data - @scope.role = @scope.roles[0] - return data + return @rs.roles.list(@scope.projectId) + .then @loadExternalUserRole + .then (roles) => + @scope.roles = roles + @scope.role = @scope.roles[0] + + return roles loadInitialData: -> promise = @repo.resolve({pslug: @params.pslug}).then (data) => @@ -256,7 +276,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
<%- permission.description %>
- checked="checked"<% } %>/> + disabled="disabled"<% } %> <% if(permission.active) { %>checked="checked"<% } %>/>
Yes No @@ -279,10 +299,23 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) -> setActivePermissions = (permissions) -> return _.map(permissions, (x) -> _.extend({}, x, {active: x["key"] in role.permissions})) + isPermissionEditable = (permission, role, project) -> + if role.external_user && + !project.is_private && + permission.key.indexOf("view_") == 0 + return false + else + return true + setActivePermissionsPerCategory = (category) -> - return _.map(category, (x) -> - _.extend({}, x, { - activePermissions: _.filter(x["permissions"], "active").length + return _.map(category, (cat) -> + cat.permissions = cat.permissions.map (permission) -> + permission.editable = isPermissionEditable(permission, role, $scope.project) + + return permission + + _.extend({}, cat, { + activePermissions: _.filter(cat["permissions"], "active").length }) ) @@ -366,6 +399,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) -> return activePermissions target = angular.element(event.currentTarget) + $scope.role.permissions = getActivePermissions() onSuccess = (role) -> @@ -381,7 +415,14 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) -> target.prop "checked", !target.prop("checked") $scope.role.permissions = getActivePermissions() - $repo.save($scope.role).then onSuccess, onError + if $scope.role.external_user + $scope.project.public_permissions = $scope.role.permissions + $scope.project.anon_permissions = $scope.role.permissions.filter (permission) -> + return permission.indexOf("view_") == 0 + + $repo.save($scope.project) + else + $repo.save($scope.role).then onSuccess, onError $scope.$on "$destroy", -> $el.off() diff --git a/app/partials/admin/admin-roles.jade b/app/partials/admin/admin-roles.jade index 52dc954f..94982f98 100644 --- a/app/partials/admin/admin-roles.jade +++ b/app/partials/admin/admin-roles.jade @@ -8,7 +8,7 @@ div.wrapper.roles(ng-controller="RolesController as ctrl", section.main.admin-roles.admin-common .header-with-actions include ../includes/components/mainTitle - .action-buttons + .action-buttons(ng-if="!role.external_user") a.button-red.delete-role(href="", title="Delete", ng-click="ctrl.delete()") span Delete @@ -24,7 +24,7 @@ div.wrapper.roles(ng-controller="RolesController as ctrl", div.any-computable-role(ng-hide="anyComputableRole") Be careful, no role in your project will be able to estimate the point value for user stories - div.general-category + div.general-category(ng-if="!role.external_user") | When enabled, members assigned to this role will be able to estimate the point value for user stories div.check input(type="checkbox", ng-model="role.computable", ng-change="ctrl.setComputable()") diff --git a/app/styles/modules/admin/admin-roles.scss b/app/styles/modules/admin/admin-roles.scss index 58203d80..daa55c21 100644 --- a/app/styles/modules/admin/admin-roles.scss +++ b/app/styles/modules/admin/admin-roles.scss @@ -101,5 +101,11 @@ opacity: 0; } } + input:disabled { + cursor: auto; + + div { + background-color: #ccc; + } + } } }