updates to prompt-for tests and logic for new RBAC updates

This commit is contained in:
AlanCoding
2016-04-18 14:29:30 -04:00
parent 9c75ced9f8
commit 5abde762ae
2 changed files with 14 additions and 14 deletions

View File

@@ -2120,12 +2120,12 @@ class JobTemplateLaunch(RetrieveAPIView, GenericAPIView):
if 'credential' in prompted_fields and prompted_fields['credential'] != getattrd(obj, 'credential.pk', None): if 'credential' in prompted_fields and prompted_fields['credential'] != getattrd(obj, 'credential.pk', None):
new_credential = Credential.objects.get(pk=prompted_fields['credential']) new_credential = Credential.objects.get(pk=prompted_fields['credential'])
if not request.user.can_access(Credential, 'use', new_credential): if request.user not in new_credential.use_role:
raise PermissionDenied() raise PermissionDenied()
if 'inventory' in prompted_fields and prompted_fields['inventory'] != getattrd(obj, 'inventory.pk', None): if 'inventory' in prompted_fields and prompted_fields['inventory'] != getattrd(obj, 'inventory.pk', None):
new_inventory = Inventory.objects.get(pk=prompted_fields['inventory']) new_inventory = Inventory.objects.get(pk=prompted_fields['inventory'])
if not request.user.can_access(Inventory, 'use', new_inventory): if request.user not in new_inventory.use_role:
raise PermissionDenied() raise PermissionDenied()
kv = prompted_fields kv = prompted_fields

View File

@@ -3,6 +3,7 @@ import yaml
from awx.api.serializers import JobLaunchSerializer from awx.api.serializers import JobLaunchSerializer
from awx.main.models.credential import Credential from awx.main.models.credential import Credential
from awx.main.models.inventory import Inventory
from awx.main.models.jobs import Job, JobTemplate from awx.main.models.jobs import Job, JobTemplate
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@@ -93,7 +94,7 @@ def test_job_accept_prompted_vars(runtime_data, job_template_prompts, post, user
job_template = job_template_prompts(True) job_template = job_template_prompts(True)
admin_user = user('admin', True) admin_user = user('admin', True)
job_template.inventory.executor_role.members.add(admin_user) job_template.inventory.execute_role.members.add(admin_user)
job_template.inventory.save() job_template.inventory.save()
response = post(reverse('api:job_template_launch', args=[job_template.pk]), response = post(reverse('api:job_template_launch', args=[job_template.pk]),
@@ -112,20 +113,19 @@ def test_job_accept_prompted_vars(runtime_data, job_template_prompts, post, user
assert job_obj.job_tags == runtime_data['job_tags'] assert job_obj.job_tags == runtime_data['job_tags']
@pytest.mark.django_db @pytest.mark.django_db
@pytest.mark.skip(reason="JT can_start without inventory needs to be fixed before passing")
@pytest.mark.job_runtime_vars @pytest.mark.job_runtime_vars
def test_job_accept_prompted_vars_null(runtime_data, job_template_prompts_null, post, user): def test_job_accept_prompted_vars_null(runtime_data, job_template_prompts_null, post, user):
job_template = job_template_prompts_null job_template = job_template_prompts_null
common_user = user('admin', False) common_user = user('not-admin', False)
job_template.executor_role.members.add(common_user) # Give user permission to execute the job template
job_template.save() job_template.execute_role.members.add(common_user)
job_template.project.member_role.members.add(common_user)
job_template.project.save()
# Give user permission to use inventory and credential at runtime
credential = Credential.objects.get(pk=runtime_data['credential']) credential = Credential.objects.get(pk=runtime_data['credential'])
credential.usage_role.members.add(common_user) credential.use_role.members.add(common_user)
credential.save() inventory = Inventory.objects.get(pk=runtime_data['inventory'])
inventory.use_role.members.add(common_user)
response = post(reverse('api:job_template_launch', args=[job_template.pk]), response = post(reverse('api:job_template_launch', args=[job_template.pk]),
runtime_data, common_user) runtime_data, common_user)
@@ -187,13 +187,13 @@ def test_job_launch_fails_without_inventory_access(deploy_jobtemplate, machine_c
deploy_jobtemplate.ask_inventory_on_launch = True deploy_jobtemplate.ask_inventory_on_launch = True
deploy_jobtemplate.credential = machine_credential deploy_jobtemplate.credential = machine_credential
common_user = user('test-user', False) common_user = user('test-user', False)
deploy_jobtemplate.executor_role.members.add(common_user) deploy_jobtemplate.execute_role.members.add(common_user)
deploy_jobtemplate.save() deploy_jobtemplate.save()
deploy_jobtemplate.inventory.usage_role.members.add(common_user) deploy_jobtemplate.inventory.use_role.members.add(common_user)
deploy_jobtemplate.inventory.save() deploy_jobtemplate.inventory.save()
deploy_jobtemplate.project.member_role.members.add(common_user) deploy_jobtemplate.project.member_role.members.add(common_user)
deploy_jobtemplate.project.save() deploy_jobtemplate.project.save()
deploy_jobtemplate.credential.usage_role.members.add(common_user) deploy_jobtemplate.credential.use_role.members.add(common_user)
deploy_jobtemplate.credential.save() deploy_jobtemplate.credential.save()
# Assure that the base job template can be launched to begin with # Assure that the base job template can be launched to begin with