2012-10-30 4 views
5

Sto tentando di impostare alcune cartelle gestite dal gruppo che non dovrebbero essere viste dagli altri gruppi. Attualmente, ottengo il risultato deselezionando la casella di controllo "Eredita i permessi dai livelli superiori" nella scheda di condivisione @@, ma vorrei automatizzarla.Disattivazione di "Eredita autorizzazioni da livelli superiori" a livello di programmazione

Non ho trovato nulla a riguardo nella documentazione o su Google. Dopo aver cercato nella directory delle uova ho trovato alcune cose interessanti su 'ac_inherited_permissions', ma nulla mi è saltato addosso come soluzione.

Mi piacerebbe fare qualcosa come obj.inherited_permissions = False, o chiamare qualsiasi funzione io debba.

Qualche idea?

risposta

5

La scheda di condivisione interessa solo i ruoli locali. Questi di solito sono ereditati dai genitori (acquisiti), ma è possibile bloccarli in modo esplicito impostando __ac_local_roles_block__ su True su un oggetto.

Assicurarsi che, tuttavia, si imposta questa sull'oggetto da scartare (nessun contesto di acquisizione):

from Acquisition import aq_base 

aq_base(object).__ac_local_roles_block__ = True 
+0

ho pensato che sarebbe stato qualcosa di simile. Grazie! – waldopat

+0

Martijn, ti dispiacerebbe elaborare l'avviso sull'utilizzo di aq_base? – cewing

+0

@cewing: in questo caso, è effettivamente ridondante; l'impostazione di un attributo lo fa sempre sull'oggetto corrente (non salirà la catena per trovare l'attributo altrove e impostarlo lì). Ma l'esplicito è meglio di quello implicito, e quando * retreaving * l'attributo per verificare se è impostato, si vuole assolutamente guardare a 'aq_base' (per questo particolare attributo). Da qui l'esplicito scartare. –

Problemi correlati