using System.Collections.Generic; using System.Linq; namespace Abp.Authorization { /// /// Used to store and manipulate dictionary of permissions. /// internal class PermissionDictionary : Dictionary { /// /// Adds all child permissions of current permissions recursively. /// public void AddAllPermissions() { foreach (var permission in Values.ToList()) { AddPermissionRecursively(permission); } } /// /// Adds a permission and it's all child permissions to dictionary. /// /// Permission to be added private void AddPermissionRecursively(Permission permission) { //Prevent multiple adding of same named permission. Permission existingPermission; if (TryGetValue(permission.Name, out existingPermission)) { if (existingPermission != permission) { throw new AbpInitializationException("Duplicate permission name detected for " + permission.Name); } } else { this[permission.Name] = permission; } //Add child permissions (recursive call) foreach (var childPermission in permission.Children) { AddPermissionRecursively(childPermission); } } } }