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