User tenancy cannot be changed

Project: http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/commit/fb427584
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/tree/fb427584
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/diff/fb427584

Branch: refs/heads/master
Commit: fb4275849b5f90a00c74e9538bd7903f7978f099
Parents: 3e23956
Author: nir-sopher <n...@qwilt.com>
Authored: Mon Jun 26 16:22:11 2017 +0300
Committer: Jeremy Mitchell <mitchell...@gmail.com>
Committed: Wed Jul 19 15:55:31 2017 -0600

----------------------------------------------------------------------
 traffic_ops/app/lib/API/User.pm           | 10 ++++++++
 traffic_ops/app/t/api/1.2/tenant_access.t | 34 +++++++++++++-------------
 2 files changed, 27 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fb427584/traffic_ops/app/lib/API/User.pm
----------------------------------------------------------------------
diff --git a/traffic_ops/app/lib/API/User.pm b/traffic_ops/app/lib/API/User.pm
index 5b09d74..03372b8 100644
--- a/traffic_ops/app/lib/API/User.pm
+++ b/traffic_ops/app/lib/API/User.pm
@@ -184,6 +184,16 @@ sub update {
                #no access to target tenancy
                return $self->forbidden();
        }
+    if (defined ($user->tenant_id) and $user->tenant_id != $tenant_id){
+        #not allowing a tenant to be changed once not "none".
+        if (!defined($tenant_id) and 
$tenant_utils->is_root_tenant($tenants_data, 
$tenant_utils->current_user_tenant())) {
+            #however, as currently user deletion is not supported, a "root" 
tenant can
+            #move a user to undef tenant.
+        }
+        else{
+            return $self->alert("User tenant cannot be changed.");
+        }
+    }
 
        my ( $is_valid, $result ) = $self->is_valid( $params, $user_id );
 

http://git-wip-us.apache.org/repos/asf/incubator-trafficcontrol/blob/fb427584/traffic_ops/app/t/api/1.2/tenant_access.t
----------------------------------------------------------------------
diff --git a/traffic_ops/app/t/api/1.2/tenant_access.t 
b/traffic_ops/app/t/api/1.2/tenant_access.t
index b764502..2f5fce7 100644
--- a/traffic_ops/app/t/api/1.2/tenant_access.t
+++ b/traffic_ops/app/t/api/1.2/tenant_access.t
@@ -289,7 +289,7 @@ sub clear_tenant {
     #deleting the user - as the user do operations this is not so simple. We 
move it to the root tenant and the fixture cleanup will do
     my $json = decode_json( 
$t->get_ok('/api/1.2/users/'.$tenants_data->{$name}->{'admin_uid'})->tx->res->content->asset->slurp
 );
     my $response    = $json->{response}[0];
-    $response->{"tenantId"} = get_tenant_id("root");
+    $response->{"tenantId"} = undef;
     ok $t->put_ok('/api/1.2/users/'.$tenants_data->{$name}->{'admin_uid'} => 
{Accept => 'application/json'} => json => $response)
         ->status_is(200)->or( sub { diag 
$t->tx->res->content->asset->{content}; } )
         , 'Success move user?';
@@ -424,22 +424,22 @@ sub test_user_resource_write_allow_access {
         , 'Success change user email: login tenant:'.$login_tenant.' resource 
tenant: '.$resource_tenant.'?';
 
     #change the tenant to my tenant
-    $response2edit->{"tenantId"} = $tenants_data->{$login_tenant}->{'id'};
-    ok $t->put_ok('/api/1.2/users/'.$new_userid => {Accept => 
'application/json'} => json => $response2edit)
-            ->status_is(200)->or( sub { diag 
$t->tx->res->content->asset->{content}; } )
-            ->json_is( "/response/username" =>  $response2edit->{"username"})
-            ->json_is( "/response/email" =>  $response2edit->{"email"} )
-            ->json_is( "/response/tenantId" =>  $response2edit->{"tenantId"})
-        , 'Success change user tenant to login: login tenant:'.$login_tenant.' 
resource tenant: '.$resource_tenant.'?';
-
-    #change the tenant to his tenant
-    $response2edit->{"tenantId"} = $tenants_data->{$resource_tenant}->{'id'};
-    ok $t->put_ok('/api/1.2/users/'.$new_userid => {Accept => 
'application/json'} => json => $response2edit)
-            ->status_is(200)->or( sub { diag 
$t->tx->res->content->asset->{content}; } )
-            ->json_is( "/response/username" =>  $response2edit->{"username"})
-            ->json_is( "/response/email" =>  $response2edit->{"email"} )
-            ->json_is( "/response/tenantId" =>  $response2edit->{"tenantId"})
-        , 'Success change user tenant to orig: login tenant:'.$login_tenant.' 
resource tenant: '.$resource_tenant.'?';
+    if ($resource_tenant eq "none" or $resource_tenant eq $login_tenant) {
+        $response2edit->{"tenantId"} = $tenants_data->{$login_tenant}->{'id'};
+        ok $t->put_ok('/api/1.2/users/'.$new_userid => { Accept => 
'application/json' } => json => $response2edit)
+                ->status_is(200)->or( sub { diag 
$t->tx->res->content->asset->{content}; } )
+                ->json_is( "/response/username" => 
$response2edit->{"username"})
+                ->json_is( "/response/email" => $response2edit->{"email"} )
+                ->json_is( "/response/tenantId" => 
$response2edit->{"tenantId"})
+            , 'Success change user tenant to login: login 
tenant:'.$login_tenant.' resource tenant: '.$resource_tenant.'?';
+    }
+    else{
+        $response2edit->{"tenantId"} = $tenants_data->{$login_tenant}->{'id'};
+        ok $t->put_ok('/api/1.2/users/'.$new_userid => { Accept => 
'application/json' } => json => $response2edit)
+                ->json_is( "/alerts/0/text" => "User tenant cannot be 
changed.")
+                ->status_is(400)->or( sub { diag 
$t->tx->res->content->asset->{content}; } )
+            , 'Cannot change tenancy as it is not allowed: login 
tenant:'.$login_tenant.' resource tenant: '.$resource_tenant.'?';
+    }
 
     logout_from_tenant_admin();
 

Reply via email to