private void AddCheckPermissions(ScreenName parent, CheckPermissions checkPermissions, IEnumerable <string> propagationPaths, bool addSelfPropagationSource)
        {
            foreach (var propagationKey in propagationPaths)
            {
                HashSet <string> nextPropagationPaths;

                var permissionKey = Pair.Create(propagationKey, parent);
                if (!checkPermissionsForScreenName.ContainsKey(permissionKey))   // No permissions still set for this key

                {
                    if (permissionPropagationPath.TryGetValue(propagationKey, out nextPropagationPaths))
                    {
                        checkPermissionsForScreenName.Add(permissionKey, checkPermissions);

                        AddCheckPermissions(parent, checkPermissions, nextPropagationPaths, /*addSelfPropagationSource*/ true);

                        foreach (var childIndex in childIndexes)
                        {
                            childIndex.AddCheckPermissions(parent, checkPermissions, nextPropagationPaths);
                        }
                    }
                    else
                    {
                        if (addSelfPropagationSource)   // add target of self propagations anyway, since they can be the target server actions
                        {
                            checkPermissionsForScreenName.Add(permissionKey, checkPermissions);
                        }
                    }
                }
            }
        }
 private void AddCheckPermissions(ScreenName parent, CheckPermissions checkPermissions, IEnumerable <string> propagationPaths)
 {
     AddCheckPermissions(parent, checkPermissions, propagationPaths, /*addSelfPropagationSource*/ false);
 }
 public void AddCheckPermissions(ScreenName parent, CheckPermissions checkPermissions)
 {
     AddCheckPermissions(parent, checkPermissions, permissionPropagationPath.Keys, /*addSelfPropagationSource*/ false);
 }
 public void AddAnonymousCheckPermission(ScreenName screen, string[] propagationPaths)
 {
     AddCheckPermissions(screen, CheckPermissionsIndex.AnonymousCheck, propagationPaths);
 }
 public bool TryGetCheckPermissions(ScreenName parentName, String usageKey, out CheckPermissions checkPermissions)
 {
     return(checkPermissionsForScreenName.TryGetValue(Pair.Create(usageKey, parentName), out checkPermissions));
 }
 public bool TryGetCheckPermissions(ScreenName parentName, out CheckPermissions checkPermissions)
 {
     return(TryGetCheckPermissions(parentName, ANY_USAGE_KEY, out checkPermissions));
 }