#!/usr/bin/perl -w
use
lib
"$Bin/../../lib"
;
use
Google::Ads::GoogleAds::V19::Services::GoogleAdsService::SearchGoogleAdsRequest;
use
Google::Ads::GoogleAds::V19::Services::CustomerUserAccessService::CustomerUserAccessOperation;
my
$customer_id
=
"INSERT_CUSTOMER_ID_HERE"
;
my
$email_address
=
"INSERT_EMAIL_ADDRESS_HERE"
;
my
$access_role
=
"INSERT_ACCESS_ROLE_HERE"
;
sub
update_user_access {
my
(
$api_client
,
$customer_id
,
$email_address
,
$access_role
) =
@_
;
my
$user_id
= get_user_access(
$api_client
,
$customer_id
,
$email_address
);
if
(
defined
$user_id
) {
modify_user_access(
$api_client
,
$customer_id
,
$user_id
,
$access_role
);
}
return
1;
}
sub
get_user_access {
my
(
$api_client
,
$customer_id
,
$email_address
) =
@_
;
my
$search_query
=
"SELECT customer_user_access.user_id, customer_user_access.email_address, "
.
"customer_user_access.access_role, customer_user_access.access_creation_date_time "
.
"FROM customer_user_access "
.
"WHERE customer_user_access.email_address LIKE '$email_address'"
;
my
$search_request
=
Google::Ads::GoogleAds::V19::Services::GoogleAdsService::SearchGoogleAdsRequest
->new({
customerId
=>
$customer_id
,
query
=>
$search_query
});
my
$google_ads_service
=
$api_client
->GoogleAdsService();
my
$iterator
= Google::Ads::GoogleAds::Utils::SearchGoogleAdsIterator->new({
service
=>
$google_ads_service
,
request
=>
$search_request
});
if
(
$iterator
->has_next) {
my
$google_ads_row
=
$iterator
->
next
;
my
$access
=
$google_ads_row
->{customerUserAccess};
printf
"Customer user access with User ID = %d, Email Address = '%s' "
.
"Access Role = '%s' and Creation Time = %s was found in "
.
"Customer ID: %d.\n"
,
$access
->{userId},
$access
->{emailAddress},
$access
->{accessRole},
$access
->{accessCreationDateTime},
$customer_id
;
return
$access
->{userId};
}
else
{
print
"No customer user access with requested email was found.\n"
;
return
undef
;
}
}
sub
modify_user_access {
my
(
$api_client
,
$customer_id
,
$user_id
,
$access_role
) =
@_
;
my
$user_access
=
Google::Ads::GoogleAds::V19::Resources::CustomerUserAccess->new({
resourceName
=>
Google::Ads::GoogleAds::V19::Utils::ResourceNames::customer_user_access(
$customer_id
,
$user_id
),
accessRole
=>
$access_role
});
my
$user_access_operation
=
Google::Ads::GoogleAds::V19::Services::CustomerUserAccessService::CustomerUserAccessOperation
->new({
update
=>
$user_access
,
updateMask
=> all_set_fields_of(
$user_access
)});
my
$user_access_response
=
$api_client
->CustomerUserAccessService()->mutate({
customerId
=>
$customer_id
,
operation
=>
$user_access_operation
});
printf
"Successfully modified customer user access with resource name '%s'.\n"
,
$user_access_response
->{result}{resourceName};
}
if
(abs_path($0) ne abs_path(__FILE__)) {
return
1;
}
my
$api_client
= Google::Ads::GoogleAds::Client->new();
$api_client
->set_die_on_faults(1);
GetOptions(
"customer_id=s"
=> \
$customer_id
,
"email_address=s"
=> \
$email_address
,
"access_role=s"
=> \
$access_role
);
pod2usage(2)
if
not check_params(
$customer_id
,
$email_address
,
$access_role
);
update_user_access(
$api_client
,
$customer_id
=~ s/-//gr,
$email_address
,
$access_role
);