2015-04-20 9 views
5

Próbuję usunąć określoną rolę z elementu. W tej chwili mam przydzieloną 3 role. "Wszyscy", "sitecore \ author", "sitecore \ developer". Jak usunąć "Wszyscy" i "sitecore \ author". Do tej pory próbowałem tego, ale to nie działa.Jak usunąć rolę bezpieczeństwa w 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(); 
} 

Gdy używam accessrules.clear() usuwa wszystkie role, ale chcę, aby być w stanie usunąć tylko dwa. Jak mogę to zrobić?

+1

można dodawać surowe wartości pola bezpieczeństwa na sprzęcie? –

+0

Gdy próbuję uzyskać surowy widok, otrzymuję komunikat "Funkcja oceny została wyłączona, ponieważ upłynął czas poprzedniej oceny funkcji". Czy istnieje sposób, w jaki mogę powtórzyć wszystkie role i usunąć je, sprawdzając nazwę roli? – siddhipur

+1

Rola Wszyscy jest rolą wirtualną. Sitecore zapewnia globalną rolę Wszyscy, Rola jest używana podczas przypisywania i rozwiązywania zabezpieczeń dla wszystkich użytkowników, Może dlatego nie można go usunąć, ponieważ jest to rola wirtualna –

Odpowiedz

1

Można zrobić coś takiego:

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);