public static void CopyAuthorization( ISecured sourceEntity, ISecured targetEntity, int? personId ) { using ( new Rock.Helpers.UnitOfWorkScope() ) { // If there's no Authorizations object, create it if ( Authorizations == null ) Load(); AuthService authService = new AuthService(); // Delete the current authorizations for the target entity foreach(Auth auth in authService.GetAuthsByEntityTypeAndEntityId(targetEntity.AuthEntity, targetEntity.Id)) authService.DeleteAuth(auth); Dictionary<string, List<AuthRule>> newActions = new Dictionary<string, List<AuthRule>>(); int order = 0; foreach ( KeyValuePair<string, List<AuthRule>> action in Authorizations[sourceEntity.AuthEntity][sourceEntity.Id] ) if (targetEntity.SupportedActions.Contains(action.Key)) { newActions.Add( action.Key, new List<AuthRule>() ); foreach ( AuthRule rule in action.Value ) { Auth auth = new Auth(); auth.EntityType = targetEntity.AuthEntity; auth.EntityId = targetEntity.Id; auth.Order = order; auth.Action = action.Key; auth.AllowOrDeny = rule.AllowOrDeny; auth.UserOrRole = rule.UserOrRole; auth.UserOrRoleName = rule.UserOrRoleName; authService.AddAuth(auth); authService.Save(auth, personId); newActions[action.Key].Add( new AuthRule( rule.AllowOrDeny, rule.UserOrRole, rule.UserOrRoleName ) ); order++; } } if ( !Authorizations.ContainsKey( targetEntity.AuthEntity ) ) Authorizations.Add( targetEntity.AuthEntity, new Dictionary<int, Dictionary<string, List<AuthRule>>>() ); Dictionary<int, Dictionary<string, List<AuthRule>>> entityType = Authorizations[targetEntity.AuthEntity]; if ( !entityType.ContainsKey( targetEntity.Id ) ) entityType.Add( targetEntity.Id, new Dictionary<string, List<AuthRule>>() ); entityType[targetEntity.Id] = newActions; } }