external user permissions

stable
Juanfran 2015-03-10 08:43:27 +01:00 committed by David Barragán Merino
parent 69c9f03b90
commit fe40b0bcd6
3 changed files with 58 additions and 11 deletions

View File

@ -64,16 +64,36 @@ class RolesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fil
loadProject: -> loadProject: ->
return @rs.projects.get(@scope.projectId).then (project) => return @rs.projects.get(@scope.projectId).then (project) =>
@scope.project = project @scope.project = project
@scope.$emit('project:loaded', project) @scope.$emit('project:loaded', project)
@scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable)) @scope.anyComputableRole = _.some(_.map(project.roles, (point) -> point.computable))
return project 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: -> loadRoles: ->
return @rs.roles.list(@scope.projectId).then (data) => return @rs.roles.list(@scope.projectId)
@scope.roles = data .then @loadExternalUserRole
@scope.role = @scope.roles[0] .then (roles) =>
return data @scope.roles = roles
@scope.role = @scope.roles[0]
return roles
loadInitialData: -> loadInitialData: ->
promise = @repo.resolve({pslug: @params.pslug}).then (data) => promise = @repo.resolve({pslug: @params.pslug}).then (data) =>
@ -256,7 +276,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
<div class="category-item" data-id="<%- permission.key %>"> <div class="category-item" data-id="<%- permission.key %>">
<span><%- permission.description %></span> <span><%- permission.description %></span>
<div class="check"> <div class="check">
<input type="checkbox" <% if(permission.active) { %>checked="checked"<% } %>/> <input type="checkbox" <% if(!permission.editable) { %>disabled="disabled"<% } %> <% if(permission.active) { %>checked="checked"<% } %>/>
<div></div> <div></div>
<span class="check-text check-yes">Yes</span> <span class="check-text check-yes">Yes</span>
<span class="check-text check-no">No</span> <span class="check-text check-no">No</span>
@ -279,10 +299,23 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
setActivePermissions = (permissions) -> setActivePermissions = (permissions) ->
return _.map(permissions, (x) -> _.extend({}, x, {active: x["key"] in role.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) -> setActivePermissionsPerCategory = (category) ->
return _.map(category, (x) -> return _.map(category, (cat) ->
_.extend({}, x, { cat.permissions = cat.permissions.map (permission) ->
activePermissions: _.filter(x["permissions"], "active").length 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 return activePermissions
target = angular.element(event.currentTarget) target = angular.element(event.currentTarget)
$scope.role.permissions = getActivePermissions() $scope.role.permissions = getActivePermissions()
onSuccess = (role) -> onSuccess = (role) ->
@ -381,7 +415,14 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
target.prop "checked", !target.prop("checked") target.prop "checked", !target.prop("checked")
$scope.role.permissions = getActivePermissions() $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", -> $scope.$on "$destroy", ->
$el.off() $el.off()

View File

@ -8,7 +8,7 @@ div.wrapper.roles(ng-controller="RolesController as ctrl",
section.main.admin-roles.admin-common section.main.admin-roles.admin-common
.header-with-actions .header-with-actions
include ../includes/components/mainTitle 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()") a.button-red.delete-role(href="", title="Delete", ng-click="ctrl.delete()")
span 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.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 | When enabled, members assigned to this role will be able to estimate the point value for user stories
div.check div.check
input(type="checkbox", ng-model="role.computable", ng-change="ctrl.setComputable()") input(type="checkbox", ng-model="role.computable", ng-change="ctrl.setComputable()")

View File

@ -101,5 +101,11 @@
opacity: 0; opacity: 0;
} }
} }
input:disabled {
cursor: auto;
+ div {
background-color: #ccc;
}
}
} }
} }