Add granular permission levels to User
Display buttons for job control only if the user has permission to do so.
This commit is contained in:
parent
6d52827576
commit
3f30eecc7d
|
@ -37,6 +37,24 @@ require 'travis/model'
|
||||||
permissions
|
permissions
|
||||||
).property()
|
).property()
|
||||||
|
|
||||||
|
adminPermissions: (->
|
||||||
|
permissions = Ember.ArrayProxy.create(content: [])
|
||||||
|
Travis.ajax.get('/users/permissions', (data) => permissions.set('content', data.admin))
|
||||||
|
permissions
|
||||||
|
).property()
|
||||||
|
|
||||||
|
pullPermissions: (->
|
||||||
|
permissions = Ember.ArrayProxy.create(content: [])
|
||||||
|
Travis.ajax.get('/users/permissions', (data) => permissions.set('content', data.pull))
|
||||||
|
permissions
|
||||||
|
).property()
|
||||||
|
|
||||||
|
pushPermissions: (->
|
||||||
|
permissions = Ember.ArrayProxy.create(content: [])
|
||||||
|
Travis.ajax.get('/users/permissions', (data) => permissions.set('content', data.push))
|
||||||
|
permissions
|
||||||
|
).property()
|
||||||
|
|
||||||
updateLocale: (locale) ->
|
updateLocale: (locale) ->
|
||||||
@save()
|
@save()
|
||||||
Travis.setLocale(locale)
|
Travis.setLocale(locale)
|
||||||
|
|
|
@ -107,14 +107,19 @@ Travis.reopen
|
||||||
displayRegenerateKey: true
|
displayRegenerateKey: true
|
||||||
|
|
||||||
canRegenerateKey: (->
|
canRegenerateKey: (->
|
||||||
@get('displayRegenerateKey') && @get('hasPermission')
|
@get('displayRegenerateKey') && @get('hasAdminPermission')
|
||||||
).property('hasPermission')
|
).property('hasAdminPermission')
|
||||||
|
|
||||||
hasPermission: (->
|
hasPermission: (->
|
||||||
if permissions = @get('currentUser.permissions')
|
if permissions = @get('currentUser.permissions')
|
||||||
permissions.contains parseInt(@get('repo.id'))
|
permissions.contains parseInt(@get('repo.id'))
|
||||||
).property('currentUser.permissions.length', 'repo.id')
|
).property('currentUser.permissions.length', 'repo.id')
|
||||||
|
|
||||||
|
hasAdminPermission: (->
|
||||||
|
if permissions = @get('currentUser.adminPermissions')
|
||||||
|
permissions.contains parseInt(@get('repo.id'))
|
||||||
|
).property('currentUser.adminPermissions.length', 'repo.id')
|
||||||
|
|
||||||
statusImageUrl: (->
|
statusImageUrl: (->
|
||||||
Travis.Urls.statusImage(@get('slug'))
|
Travis.Urls.statusImage(@get('slug'))
|
||||||
).property('slug')
|
).property('slug')
|
||||||
|
@ -174,21 +179,26 @@ Travis.reopen
|
||||||
permissions.contains parseInt(@get('repo.id'))
|
permissions.contains parseInt(@get('repo.id'))
|
||||||
).property('currentUser.permissions.length', 'repo.id')
|
).property('currentUser.permissions.length', 'repo.id')
|
||||||
|
|
||||||
|
hasPushPermission: (->
|
||||||
|
if permissions = @get('currentUser.pushPermissions')
|
||||||
|
permissions.contains parseInt(@get('repo.id'))
|
||||||
|
).property('currentUser.pushPermissions.length', 'repo.id')
|
||||||
|
|
||||||
displayRequeueBuild: (->
|
displayRequeueBuild: (->
|
||||||
@get('isBuildTab') && @get('build.isFinished')
|
@get('isBuildTab') && @get('build.isFinished')
|
||||||
).property('isBuildTab', 'build.isFinished')
|
).property('isBuildTab', 'build.isFinished')
|
||||||
|
|
||||||
canRequeueBuild: (->
|
canRequeueBuild: (->
|
||||||
@get('displayRequeueBuild') && @get('hasPermission')
|
@get('displayRequeueBuild') && @get('hasPushPermission')
|
||||||
).property('displayRequireBuild', 'hasPermission')
|
).property('displayRequireBuild', 'hasPushPermission')
|
||||||
|
|
||||||
displayRequeueJob: (->
|
displayRequeueJob: (->
|
||||||
@get('isJobTab') && @get('job.isFinished')
|
@get('isJobTab') && @get('job.isFinished')
|
||||||
).property('isJobTab', 'job.isFinished')
|
).property('isJobTab', 'job.isFinished')
|
||||||
|
|
||||||
canRequeueJob: (->
|
canRequeueJob: (->
|
||||||
@get('displayRequeueJob') && @get('hasPermission')
|
@get('displayRequeueJob') && @get('hasPushPermission')
|
||||||
).property('displayRequeueJob', 'hasPermission')
|
).property('displayRequeueJob', 'hasPushPermission')
|
||||||
|
|
||||||
showDownloadLog: (->
|
showDownloadLog: (->
|
||||||
@get('jobIdForLog')
|
@get('jobIdForLog')
|
||||||
|
@ -205,16 +215,16 @@ Travis.reopen
|
||||||
).property('jobIdForLog')
|
).property('jobIdForLog')
|
||||||
|
|
||||||
canCancelBuild: (->
|
canCancelBuild: (->
|
||||||
@get('displayCancelBuild') && @get('hasPermission')
|
@get('displayCancelBuild') && @get('hasPushPermission')
|
||||||
).property('displayCancelBuild', 'hasPermission')
|
).property('displayCancelBuild', 'hasPushPermission')
|
||||||
|
|
||||||
displayCancelBuild: (->
|
displayCancelBuild: (->
|
||||||
@get('isBuildTab') && @get('build.canCancel')
|
@get('isBuildTab') && @get('build.canCancel')
|
||||||
).property('isBuildTab', 'build.canCancel')
|
).property('isBuildTab', 'build.canCancel')
|
||||||
|
|
||||||
canCancelJob: (->
|
canCancelJob: (->
|
||||||
@get('displayCancelJob') && @get('hasPermission')
|
@get('displayCancelJob') && @get('hasPushPermission')
|
||||||
).property('displayCancelJob', 'hasPermission')
|
).property('displayCancelJob', 'hasPushPermission')
|
||||||
|
|
||||||
displayCancelJob: (->
|
displayCancelJob: (->
|
||||||
@get('isJobTab') && @get('job.canCancel')
|
@get('isJobTab') && @get('job.canCancel')
|
||||||
|
|
32
assets/scripts/spec/unit/user_spec.coffee
Normal file
32
assets/scripts/spec/unit/user_spec.coffee
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
record = null
|
||||||
|
|
||||||
|
module "Travis.User",
|
||||||
|
setup: ->
|
||||||
|
teardown: ->
|
||||||
|
Travis.User.resetData()
|
||||||
|
|
||||||
|
test '', ->
|
||||||
|
$.mockjax({
|
||||||
|
url: '/users/permissions',
|
||||||
|
responseTime: 10,
|
||||||
|
responseText: {
|
||||||
|
permissions: [1],
|
||||||
|
admin: [1],
|
||||||
|
pull: [2],
|
||||||
|
push: [3]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Travis.User.load [{ id: '1', login: 'test@travis-ci.org' }]
|
||||||
|
user = null
|
||||||
|
pushPermissions = null
|
||||||
|
adminPermissions = null
|
||||||
|
|
||||||
|
Ember.run ->
|
||||||
|
user = Travis.User.find(1)
|
||||||
|
pushPermissions = user.get('pushPermissions')
|
||||||
|
adminPermissions = user.get('adminPermissions')
|
||||||
|
|
||||||
|
wait().then ->
|
||||||
|
deepEqual(adminPermissions.toArray(), [1])
|
||||||
|
deepEqual(pushPermissions.toArray(), [3])
|
Loading…
Reference in New Issue
Block a user