/****************************************************************************** * Programme : The 'Factory Reset' for Permissions: Using remAllAcsData to Clean Up CAS Tables * Reference : REVERTE20B * Source : https://www.wearecas.eu/de/sampleCode/REVERTE20B ******************************************************************************/ /* --- BLOC 1 --- */ CAS casauto; /* Création d'une caslib temporaire et d'une table simple */ caslib _NAME_TEMP_ cas datasource=(srctype='path') path='/tmp/'; data _NAME_TEMP_.ma_table_test; x=1; output; run; /* Appliquer un contrôle d'accès direct pour la démonstration */ accessControl.addTableAcl / caslib='_NAME_TEMP_', table='ma_table_test', userId='sasguest', perm='read'; /* Vérifier les contrôles d'accès avant la réinitialisation (optionnel) */ proc cas; accessControl.showTableAcl / caslib='_NAME_TEMP_', table='ma_table_test'; run; /* Réinitialiser tous les contrôles d'accès directs pour 'ma_table_test' */ accessControl.remAllAcsData / caslib='_NAME_TEMP_', table='ma_table_test'; /* Vérifier les contrôles d'accès après la réinitialisation */ proc cas; accessControl.showTableAcl / caslib='_NAME_TEMP_', table='ma_table_test'; run; /* Nettoyage */ proc cas; table.dropTable / caslib='_NAME_TEMP_', name='ma_table_test'; caslib.dropCaslib / caslib='_NAME_TEMP_'; run; /* --- BLOC 2 --- */ CAS casauto; /* Création d'une caslib temporaire et d'une table */ caslib _NAME_TEMP_2 cas datasource=(srctype='path') path='/tmp/'; data _NAME_TEMP_2.autre_table; set sashelp.class; run; /* Appliquer des ACLs directes variées */ accessControl.addTableAcl / caslib='_NAME_TEMP_2', table='autre_table', userId='sasguest', perm='read'; accessControl.addTableAcl / caslib='_NAME_TEMP_2', table='autre_table', userId='sasuser', perm='update'; /* Afficher les ACLs avant de les retirer */ proc cas; accessControl.showTableAcl / caslib='_NAME_TEMP_2', table='autre_table'; run; /* Réinitialiser les contrôles d'accès directs */ accessControl.remAllAcsData / caslib='_NAME_TEMP_2', table='autre_table'; /* Afficher les ACLs après réinitialisation pour confirmer l'héritage */ proc cas; accessControl.showTableAcl / caslib='_NAME_TEMP_2', table='autre_table'; run; /* Nettoyage */ proc cas; table.dropTable / caslib='_NAME_TEMP_2', name='autre_table'; caslib.dropCaslib / caslib='_NAME_TEMP_2'; run; /* --- BLOC 3 --- */ CAS casauto; /* Création d'une caslib et d'une table */ caslib _NAME_TEMP_3 cas datasource=(srctype='path') path='/tmp/'; data _NAME_TEMP_3.table_heritee; x=1; y=2; run; /* Afficher les permissions initiales de la caslib et de la table */ proc cas; accessControl.showCaslibAcl / caslib='_NAME_TEMP_3'; accessControl.showTableAcl / caslib='_NAME_TEMP_3', table='table_heritee'; run; /* Ajouter une permission directe à la table qui surcharge l'héritage */ accessControl.addTableAcl / caslib='_NAME_TEMP_3', table='table_heritee', userId='sasguest', perm='promote'; /* Vérifier que la permission directe est active */ proc cas; accessControl.showTableAcl / caslib='_NAME_TEMP_3', table='table_heritee'; run; /* Réinitialiser la table aux permissions héritées */ accessControl.remAllAcsData / caslib='_NAME_TEMP_3', table='table_heritee'; /* Vérifier l'état après réinitialisation - la permission 'promote' devrait avoir disparu au niveau de la table */ proc cas; accessControl.showTableAcl / caslib='_NAME_TEMP_3', table='table_heritee'; run; /* Nettoyage */ proc cas; table.dropTable / caslib='_NAME_TEMP_3', name='table_heritee'; caslib.dropCaslib / caslib='_NAME_TEMP_3'; run; /* --- BLOC 4 --- */ CAS casauto; /* Création d'une caslib temporaire */ caslib _NAME_TEMP_4 cas datasource=(srctype='path') path='/tmp/'; /* Tentative de réinitialisation sur une table qui n'existe pas */ proc cas; accessControl.remAllAcsData / caslib='_NAME_TEMP_4', table='table_inexistante'; if _STATUS_ ne 0 then do; print 'Erreur: La table n\'existe pas ou une autre erreur s\'est produite.'; end; run; /* Création d'une table et application de permissions */ data _NAME_TEMP_4.ma_table_err; id=1; name='Test'; run; accessControl.addTableAcl / caslib='_NAME_TEMP_4', table='ma_table_err', userId='sasguest', perm='delete'; /* Réinitialisation réussie */ proc cas; accessControl.remAllAcsData / caslib='_NAME_TEMP_4', table='ma_table_err'; run; /* Nettoyage */ proc cas; table.dropTable / caslib='_NAME_TEMP_4', name='ma_table_err'; caslib.dropCaslib / caslib='_NAME_TEMP_4'; run;