ActiveDirectoryAuthorization.Services.ActiveDirectoryAuthorizationService.PermissionNames C# (CSharp) Method

PermissionNames() private static method

private static PermissionNames ( Orchard.Security.Permissions.Permission permission, IEnumerable stack ) : IEnumerable
permission Orchard.Security.Permissions.Permission
stack IEnumerable
return IEnumerable
        private static IEnumerable<string> PermissionNames(Permission permission, IEnumerable<string> stack)
        {
            // the given name is tested
            yield return permission.Name;

            // iterate implied permissions to grant, it present
            if (permission.ImpliedBy != null && permission.ImpliedBy.Any())
            {
                foreach (var impliedBy in permission.ImpliedBy)
                {
                    // avoid potential recursion
                    if (stack.Contains(impliedBy.Name))
                        continue;

                    // otherwise accumulate the implied permission names recursively
                    foreach (var impliedName in PermissionNames(impliedBy, stack.Concat(new[] { permission.Name })))
                    {
                        yield return impliedName;
                    }
                }
            }

            yield return StandardPermissions.SiteOwner.Name;
        }