Skip to content

Commit 249d541

Browse files
Add Admin examples 8 and 9
2 parents 2aa7ac0 + 015f02a commit 249d541

File tree

10 files changed

+397
-0
lines changed

10 files changed

+397
-0
lines changed

app/controllers/admin_api/eg002_create_active_clm_esign_user_controller.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def create
2121

2222
results = AdminApi::Eg002CreateActiveClmEsignUserService.new(args).worker
2323

24+
session[:clm_email] = params[:email]
25+
2426
@title = "Create a new active user for CLM and eSignature"
2527
@h1 = "Create a new active user for CLM and eSignature"
2628
@message = "Results from MultiProductUserManagement::addOrUpdateUser method:"
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
class AdminApi::Eg008UpdateUserProductPermissionProfileController < EgController
2+
before_action :check_auth
3+
4+
def create
5+
clm_email = session[:clm_email]
6+
get_data_service = AdminApi::GetDataService.new(session)
7+
8+
unless clm_email && get_data_service.check_user_exists_by_email(clm_email)
9+
@email_ok = false
10+
return
11+
end
12+
13+
begin
14+
product_permission_profiles = get_data_service.get_product_permission_profiles
15+
product_id = params[:product_id]
16+
permission_profile_id = nil
17+
18+
product_permission_profiles.each { |profile|
19+
if product_id == profile['product_id']
20+
if profile['product_name'] == "CLM"
21+
permission_profile_id = params[:clm_permission_profile_id]
22+
else
23+
permission_profile_id = params[:esign_permission_profile_id]
24+
end
25+
end
26+
}
27+
28+
args = {
29+
email: clm_email,
30+
permission_profile_id: permission_profile_id,
31+
product_id: product_id,
32+
account_id: session[:ds_account_id],
33+
organization_id: session['organization_id'],
34+
base_path: session[:ds_base_path],
35+
access_token: session[:ds_access_token]
36+
}
37+
38+
results = AdminApi::Eg008UpdateUserProductPermissionProfileService.new(args).worker
39+
40+
@title = "Update user product permission profiles using an email address"
41+
@h1 = "Update user product permission profiles using an email address"
42+
@message = "Results from MultiProductUserManagement:addUserProductPermissionProfilesByEmail method:"
43+
@json = results.to_json.to_json
44+
45+
render 'ds_common/example_done'
46+
rescue DocuSign_Admin::ApiError => e
47+
handle_error(e)
48+
end
49+
end
50+
51+
def get
52+
super
53+
get_data_service = AdminApi::GetDataService.new(session)
54+
55+
if session[:organization_id].nil?
56+
session[:organization_id] = get_data_service.get_organization_id
57+
end
58+
59+
clm_email = session[:clm_email]
60+
61+
unless clm_email && get_data_service.check_user_exists_by_email(clm_email)
62+
@email_ok = false
63+
return
64+
end
65+
66+
product_permission_profiles = get_data_service.get_product_permission_profiles
67+
68+
product_permission_profiles.each do |product_permission_profile|
69+
if product_permission_profile['product_name'] == "CLM"
70+
@clm_permission_profiles = product_permission_profile['permission_profiles']
71+
@clm_product_id = product_permission_profile['product_id']
72+
else
73+
@esign_permission_profiles = product_permission_profile['permission_profiles']
74+
@esign_product_id = product_permission_profile['product_id']
75+
end
76+
end
77+
product_list = []
78+
product_list.push({ "product_id" => @clm_product_id, "product_name" => "CLM" })
79+
product_list.push({ "product_id" => @esign_product_id, "product_name" => "eSignature" })
80+
@product_list = product_list
81+
@email_ok = true
82+
@email = clm_email
83+
end
84+
end
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
class AdminApi::Eg009DeleteUserProductPermissionProfileController < EgController
2+
before_action :check_auth
3+
4+
def create
5+
clm_email = session[:clm_email]
6+
get_data_service = AdminApi::GetDataService.new(session)
7+
8+
unless clm_email && get_data_service.check_user_exists_by_email(clm_email)
9+
@email_ok = false
10+
return
11+
end
12+
13+
begin
14+
args = {
15+
email: clm_email,
16+
product_id: params[:product_id],
17+
account_id: session[:ds_account_id],
18+
organization_id: session['organization_id'],
19+
access_token: session[:ds_access_token]
20+
}
21+
22+
results = AdminApi::Eg009DeleteUserProductPermissionProfileService.new(args).worker
23+
24+
@title = "Delete user product permission profiles using an email address"
25+
@h1 = "Delete user product permission profiles using an email address"
26+
@message = "Results from MultiProductUserManagement:removeUserProductPermission method:"
27+
@json = results.to_json.to_json
28+
29+
render 'ds_common/example_done'
30+
rescue DocuSign_Admin::ApiError => e
31+
handle_error(e)
32+
end
33+
end
34+
35+
def get
36+
super
37+
get_data_service = AdminApi::GetDataService.new(session)
38+
39+
if session[:organization_id].nil?
40+
session[:organization_id] = get_data_service.get_organization_id
41+
end
42+
43+
clm_email = session[:clm_email]
44+
45+
unless clm_email && get_data_service.check_user_exists_by_email(clm_email)
46+
@email_ok = false
47+
return
48+
end
49+
50+
args = {
51+
email: clm_email,
52+
account_id: session[:ds_account_id],
53+
organization_id: session['organization_id'],
54+
access_token: session[:ds_access_token]
55+
}
56+
57+
product_permission_profiles = AdminApi::Eg009DeleteUserProductPermissionProfileService.new(args).get_permission_profiles_by_email
58+
permission_profile_list = []
59+
clm_product_id = nil
60+
clm_permission_profile_name = nil
61+
esign_product_id = nil
62+
esign_permission_profile_name = nil
63+
64+
product_permission_profiles.each do |product_permission_profile|
65+
permission_profiles = product_permission_profile["permission_profiles"]
66+
permission_profiles.each do |permission_profile|
67+
if product_permission_profile['product_name'] == "CLM"
68+
clm_permission_profile_name = permission_profile['permission_profile_name']
69+
clm_product_id = product_permission_profile['product_id']
70+
else
71+
esign_permission_profile_name = permission_profile['permission_profile_name']
72+
esign_product_id = product_permission_profile['product_id']
73+
end
74+
end
75+
end
76+
77+
if clm_product_id
78+
permission_profile_list.push({"product_id" => clm_product_id, "permission_name" => "CLM - #{clm_permission_profile_name}"})
79+
end
80+
81+
if esign_product_id
82+
permission_profile_list.push({"product_id" => esign_product_id, "permission_name" => "eSignature - #{esign_permission_profile_name}"})
83+
end
84+
85+
@permission_profile_list = permission_profile_list
86+
@email_ok = true
87+
@email = clm_email
88+
end
89+
end
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
class AdminApi::Eg008UpdateUserProductPermissionProfileService
4+
attr_reader :args
5+
6+
def initialize(args)
7+
@args = args
8+
end
9+
10+
def worker
11+
# Step 2 start
12+
configuration = DocuSign_Admin::Configuration.new
13+
configuration.host = Rails.configuration.admin_host
14+
15+
api_client = DocuSign_Admin::ApiClient.new(configuration)
16+
api_client.set_default_header("Authorization", "Bearer #{args[:access_token]}")
17+
# Step 2 end
18+
19+
# Step 3 start
20+
product_permission_profile = DocuSign_Admin::ProductPermissionProfileRequest.new({'permission_profile_id' => args[:permission_profile_id], 'product_id' => args[:product_id]})
21+
user_product_permission_profile_request = DocuSign_Admin::UserProductPermissionProfilesRequest.new({'email' => args[:email], 'product_permission_profiles' => [product_permission_profile]})
22+
# Step 3 end
23+
24+
# Step 4 start
25+
product_permission_profiles_api = DocuSign_Admin::ProductPermissionProfilesApi.new(api_client)
26+
response = product_permission_profiles_api.add_user_product_permission_profiles_by_email(args[:organization_id], args[:account_id], user_product_permission_profile_request)
27+
# Step 4 end
28+
end
29+
end
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# frozen_string_literal: true
2+
3+
class AdminApi::Eg009DeleteUserProductPermissionProfileService
4+
attr_reader :args
5+
6+
def initialize(args)
7+
@args = args
8+
end
9+
10+
def worker
11+
# Step 2 start
12+
configuration = DocuSign_Admin::Configuration.new
13+
configuration.host = Rails.configuration.admin_host
14+
15+
api_client = DocuSign_Admin::ApiClient.new(configuration)
16+
api_client.set_default_header("Authorization", "Bearer #{args[:access_token]}")
17+
# Step 2 end
18+
19+
# Step 3 start
20+
user_product_profile_delete_request = DocuSign_Admin::UserProductProfileDeleteRequest.new({'user_email' => args[:email], 'product_ids' => [args[:product_id]]})
21+
# Step 3 end
22+
23+
# Step 4 start
24+
product_permission_profiles_api = DocuSign_Admin::ProductPermissionProfilesApi.new(api_client)
25+
response = product_permission_profiles_api.remove_user_product_permission(args[:organization_id], args[:account_id], user_product_profile_delete_request)
26+
# Step 4 end
27+
end
28+
29+
def get_permission_profiles_by_email
30+
configuration = DocuSign_Admin::Configuration.new
31+
configuration.host = Rails.configuration.admin_host
32+
33+
api_client = DocuSign_Admin::ApiClient.new(configuration)
34+
api_client.set_default_header("Authorization", "Bearer #{args[:access_token]}")
35+
36+
product_permission_profiles_api = DocuSign_Admin::ProductPermissionProfilesApi.new(api_client)
37+
38+
options = DocuSign_Admin::GetUserProductPermissionProfilesByEmailOptions.new
39+
options.email = args[:email]
40+
41+
product_permission_profiles = product_permission_profiles_api.get_user_product_permission_profiles_by_email(args[:organization_id], args[:account_id], options)
42+
product_permission_profiles.as_json['product_permission_profiles']
43+
44+
end
45+
end

app/services/admin_api/get_data_service.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ def check_import_status(import_id)
4545
return response
4646
end
4747

48+
def check_user_exists_by_email(email)
49+
worker
50+
users_api = DocuSign_Admin::UsersApi.new(@api_client)
51+
options = DocuSign_Admin::GetUsersOptions.new()
52+
options.email = email
53+
response = users_api.get_users(args[:organization_id], options)
54+
55+
if response.users.length == 0 || response.users[0].user_status == "closed"
56+
return false
57+
end
58+
59+
return true
60+
end
61+
4862
private
4963

5064
def worker
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<h4>8. Update user product permission profiles using an email address</h4>
2+
<p>Demonstrates how to update user product permission profiles. There may only be one permission profile assigned to a user per product.</p>
3+
4+
<p>
5+
API methods used:
6+
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getproductpermissionprofiles/">MultiProductUserManagement:getProductPermissionProfiles</a>,
7+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/adduserproductpermissionprofilesbyemail/">MultiProductUserManagement:addUserProductPermissionProfilesByEmail</a>.
8+
</p>
9+
10+
<p>
11+
View source file <a target="_blank" href="<%= @source_url %>"><%= @source_file %></a> on GitHub.
12+
</p>
13+
14+
<% if @email_ok %>
15+
<p>Update user product permission profile for the following email: <b><%= @email %></b></p>
16+
17+
<form class="eg" action="" method="post" data-busy="form">
18+
<div class="form-group">
19+
<label for="starting_view">Choose a product for which you want to update the permission profile</label>
20+
<%= select_tag "product_id", options_for_select(@product_list.map { |obj| [obj['product_name'], obj['product_id']] }), { :class => 'form-control' } %>
21+
</div>
22+
23+
<% if @clm_permission_profiles.present? %>
24+
<div class="form-group" id="clm-profiles">
25+
<label for="starting_view">Choose a permission profile</label>
26+
<%= select_tag "clm_permission_profile_id", options_for_select(@clm_permission_profiles.map { |obj| [obj['permission_profile_name'], obj['permission_profile_id']] }), { :class => 'form-control' } %>
27+
</div>
28+
<% else %>
29+
<div class="form-group">
30+
<p>Problem: Please first create a CLM permission profile.</a>
31+
</br>Thank you.</p>
32+
</div>
33+
<% end %>
34+
35+
<% if @esign_permission_profiles.present? %>
36+
<div class="form-group" id="esign-profiles" style="display: none">
37+
<label for="starting_view">Choose a permission profile</label>
38+
<%= select_tag "esign_permission_profile_id", options_for_select(@esign_permission_profiles.map { |obj| [obj['permission_profile_name'], obj['permission_profile_id']] }), { :class => 'form-control' } %>
39+
</div>
40+
<% else %>
41+
<div class="form-group">
42+
<p>Problem: Please first create an eSignature permission profile.</p>
43+
</br>Thank you.</p>
44+
</div>
45+
<% end %>
46+
47+
<input type="hidden" name="clm_product_id" value="<%= @clm_product_id %>">
48+
<input type="hidden" name="esign_product_id" value="<%= @esign_product_id %>">
49+
<button type="submit" class="btn btn-docu">Submit</button>
50+
</form>
51+
52+
<script src="https://code.jquery.com/jquery-latest.min.js"></script>
53+
<script type="text/javascript">
54+
$(document).ready(function () {
55+
$("#product_id").on("change", function () {
56+
if($("#product_id option:selected" ).text() === "CLM"){
57+
$("#esign-profiles").css("display", "none")
58+
$("#clm-profiles").css("display", "block")
59+
} else {
60+
$("#esign-profiles").css("display", "block")
61+
$("#clm-profiles").css("display", "none")
62+
}
63+
});
64+
});
65+
</script>
66+
<% else %>
67+
<p>Problem: You do not have the user to change permissions for. Go to <a href="eg002">example 2</a> and create one.
68+
</br>Thank you.</p>
69+
70+
<form class="eg" action="eg002" method="get">
71+
<button type="submit" class="btn btn-docu">Continue</button>
72+
</form>
73+
<% end %>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<h4>9. Delete user product permission profiles using an email address</h4>
2+
<p>Demonstrates how to list and delete DocuSign Admin user product permission profiles.</p>
3+
4+
<p>
5+
API methods used:
6+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserproductpermissionprofilesbyemail/">MultiProductUserManagement:getUserProductPermissionProfilesByEmail</a>,
7+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/removeuserproductpermission/">MultiProductUserManagement:removeUserProductPermission</a>.
8+
</p>
9+
10+
<p>
11+
View source file <a target="_blank" href="<%= @source_url %>"><%= @source_file %></a> on GitHub.
12+
</p>
13+
<% if @email_ok %>
14+
<p>Delete user product permission profile for the following email: <b><%= @email %></b></p>
15+
16+
<form class="eg" action="" method="post" data-busy="form">
17+
<% if @permission_profile_list.present? %>
18+
<div class="form-group">
19+
<label for="starting_view">Choose which product permission profile you would like to delete</label>
20+
<%= select_tag "product_id", options_for_select(@permission_profile_list.map { |obj| [obj['permission_name'], obj['product_id']] }), { :class => 'form-control' } %>
21+
</div>
22+
<% else %>
23+
<div class="form-group">
24+
<p>Problem: Please first create an eSignature permission profile.</a>
25+
</br>Thank you.</p>
26+
</div>
27+
<% end %>
28+
<button type="submit" class="btn btn-docu">Submit</button>
29+
</form>
30+
<% else %>
31+
<p>Problem: You do not have the user to change permissions for. Go to <a href="eg002">example 2</a> and create one.
32+
</br>Thank you.</p>
33+
34+
<form class="eg" action="eg002" method="get">
35+
<button type="submit" class="btn btn-docu">Continue</button>
36+
</form>
37+
<% end %>

0 commit comments

Comments
 (0)