2015-04-20 18 views
5

Sto tentando di rimuovere un ruolo specifico da un elemento. In questo momento ho 3 ruoli assegnati. "Tutti", "sitecore \ author", "sitecore \ developer". Come rimuovere "Everyone" e "sitecore \ author". Finora ho provato questo, ma non funziona.Come cancellare il ruolo di sicurezza in Sitecore?

public static void ClearSecurityRoles(this Item item) 
{ 
    var accessrules = item.Security.GetAccessRules(); 
    var role = Sitecore.Security.Accounts.Role.FromName("Everyone"); 
    accessrules.Helper.RemoveExactMatches(role,AccessRight.Any,PropagationType.Any); 
    item.SaveSecurityAccessRules(accessrules); 
} 

public static void SaveSecurityAccessRules(this Item item, AccessRuleCollection accessRules) 
{ 
    item.Editing.BeginEdit(); 
    item.Security.SetAccessRules(accessRules); 
    item.Editing.EndEdit(); 
} 

Quando uso accessrules.clear() rimuove tutti i ruoli, ma voglio essere in grado di rimuovere solo due. Come lo faccio?

+1

potete inserire il valore grezzo per il campo della sicurezza sulla voce? –

+0

Quando cerco di ottenere la vista grezza, ho ricevuto l'errore "Valutazione della funzione disabilitata perché una valutazione della funzione precedente è scaduta". Inoltre, c'è un modo per iterare su tutti i ruoli e rimuoverlo controllandone il nome? – siddhipur

+1

Il ruolo Everyone è un ruolo virtuale. Sitecore fornisce un ruolo globale per tutti, il ruolo viene utilizzato quando si assegnano e si risolvono i problemi di sicurezza per tutti gli utenti, forse perché non è possibile rimuoverlo, dal momento che è un ruolo virtuale –

risposta

1

Si potrebbe fare qualcosa di simile:

Role role = Role.FromName("Everyone"); 
AccessRuleCollection accessRules = item.Security.GetAccessRules(); 

foreach (var accessRight in _accessRights) 
{ 
    AccessRight right = AccessRight.FromName(accessRight.Value); 
    accessRules.Helper.RemoveExactMatches(role, right, PropagationType.Any); 
} 
item.Security.SetAccessRules(accessRules);