Browse Source
* Create getauditrecords.py * Update README.md * create listmodels.py * Update README.md to include listmodels.py * add support to list model projects and repositories * Update info in readme.md to reflect new name * add applyauthorizationrules.py and add instructions in README * update EXAMPLES.md with applyfolderauthorization.py sample command & sample input CSV * fix applyfolderauthorization example and remove extraneous quotes from EXAMPLES.md * made files executable * remove '=====' from list of tools in README.mdmaster
committed by
GitHub
5 changed files with 144 additions and 1 deletions
@ -0,0 +1,117 @@ |
|||||
|
#!/usr/bin/python |
||||
|
# -*- coding: utf-8 -*- |
||||
|
# |
||||
|
# applyfolderauthorization.py |
||||
|
# |
||||
|
# |
||||
|
# Change History |
||||
|
# |
||||
|
# 17Mar20 Initial development |
||||
|
# |
||||
|
# Format of input csv file is 6 columns |
||||
|
# Column 1 is the full path to the folder |
||||
|
# Column 2 is the principal type |
||||
|
# Column 3 is the principal name |
||||
|
# Column 4 is the access setting (grant or prohibit) |
||||
|
# Column 5 is the permissions on the folder |
||||
|
# Column 6 is the conveyed permissions on the folder's contents |
||||
|
# |
||||
|
# For example: |
||||
|
# /gelcontent/gelcorp/marketing/reports,group,Marketing,grant,"read,add,remove","read,update,add,remove,delete,secure" |
||||
|
# |
||||
|
# Copyright 2020, SAS Institute Inc., Cary, NC, USA. All Rights Reserved. |
||||
|
# |
||||
|
# Licensed under the Apache License, Version 2.0 (the License); |
||||
|
# you may not use this file except in compliance with the License. |
||||
|
# You may obtain a copy of the License at |
||||
|
# |
||||
|
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
|
# |
||||
|
# Unless required by applicable law or agreed to in writing, software |
||||
|
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
# See the License for the specific language governing permissions and |
||||
|
# limitations under the License. |
||||
|
# |
||||
|
import argparse |
||||
|
import csv |
||||
|
import os |
||||
|
import json |
||||
|
import subprocess |
||||
|
from sharedfunctions import callrestapi, getfolderid, file_accessible, printresult |
||||
|
|
||||
|
# CHANGE THIS VARIABLE IF YOUR CLI IS IN A DIFFERENT LOCATION |
||||
|
clidir='/opt/sas/viya/home/bin/' |
||||
|
#clidir='c:\\admincli\\' |
||||
|
|
||||
|
|
||||
|
# setup command-line arguements |
||||
|
parser = argparse.ArgumentParser(description="Apply bulk auths from a CSV file to folders and contents") |
||||
|
parser.add_argument("-f","--file", help="Full path to CSV file. Format of csv: 'folderpath,principaltype,principalid,grant_or_prohibit,perms_on_folder,perms_on_contents",required='True') |
||||
|
args = parser.parse_args() |
||||
|
file=args.file |
||||
|
|
||||
|
reqtype="post" |
||||
|
|
||||
|
check=file_accessible(file,'r') |
||||
|
constructed_bulk_rules_list=[] |
||||
|
|
||||
|
# file can be read |
||||
|
if check: |
||||
|
# print("file: "+file) |
||||
|
with open(file, 'rt') as f: |
||||
|
filecontents = csv.reader(f) |
||||
|
for row in filecontents: |
||||
|
folderpath=row[0] |
||||
|
principaltype=row[1] |
||||
|
principalname=row[2] |
||||
|
accesssetting=row[3] |
||||
|
folderpermissions=row[4] |
||||
|
conveyedpermissions=row[5] |
||||
|
|
||||
|
# print("Creating auth rules for "+folderpath) |
||||
|
|
||||
|
folderid=getfolderid(folderpath) |
||||
|
folderuri=folderid[0] |
||||
|
reqval='/folders/folders/'+folderuri |
||||
|
|
||||
|
# Construct JSON objects from auth rules defined in CSV. Two JSON objects are created for each row of CSV; one for perms on the folder object, one for conveyed perms on the object's contents. |
||||
|
value_dict_object={"description":"Created by applyfolderauthorizations.py", |
||||
|
"objectUri":reqval, |
||||
|
"permissions":folderpermissions.split(','), |
||||
|
"principalType":principaltype, |
||||
|
"principal":principalname, |
||||
|
"type":accesssetting |
||||
|
} |
||||
|
value_dict_container={"description":"Created by applyfolderauthorizations.py", |
||||
|
"containerUri":reqval, |
||||
|
"permissions":conveyedpermissions.split(','), |
||||
|
"principalType":principaltype, |
||||
|
"principal":principalname, |
||||
|
"type":accesssetting |
||||
|
} |
||||
|
|
||||
|
constructed_rule_dict_object={ |
||||
|
"op":"add", |
||||
|
"value":value_dict_object |
||||
|
} |
||||
|
constructed_rule_dict_container={ |
||||
|
"op":"add", |
||||
|
"value":value_dict_container |
||||
|
} |
||||
|
constructed_bulk_rules_list.append(constructed_rule_dict_object) |
||||
|
constructed_bulk_rules_list.append(constructed_rule_dict_container) |
||||
|
|
||||
|
else: |
||||
|
print("ERROR: cannot read "+file) |
||||
|
|
||||
|
print("Writing out bulk rule JSON file to bulk_rules_list.json") |
||||
|
# Construct JSON schema containing rules |
||||
|
bulk_rules_list_string=json.dumps(constructed_bulk_rules_list,indent=2) |
||||
|
with open("bulk_rules_list.json", "w") as text_file: |
||||
|
text_file.write(bulk_rules_list_string+'\n') |
||||
|
|
||||
|
# Execute sas-admin CLI to apply rules from JSON schema |
||||
|
command=clidir+'sas-admin authorization create-rules --file bulk_rules_list.json' |
||||
|
print("Executing command: "+command) |
||||
|
subprocess.call(command, shell=True) |
||||
Loading…
Reference in new issue