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: ->
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
return @rs.roles.list(@scope.projectId)
.then @loadExternalUserRole
.then (roles) =>
@scope.roles = roles
@scope.role = @scope.roles[0]
return data
return roles
loadInitialData: ->
promise = @repo.resolve({pslug: @params.pslug}).then (data) =>
@ -256,7 +276,7 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
<div class="category-item" data-id="<%- permission.key %>">
<span><%- permission.description %></span>
<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>
<span class="check-text check-yes">Yes</span>
<span class="check-text check-no">No</span>
@ -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,6 +415,13 @@ RolePermissionsDirective = ($rootscope, $repo, $confirm) ->
target.prop "checked", !target.prop("checked")
$scope.role.permissions = getActivePermissions()
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", ->

View File

@ -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()")

View File

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