/// <summary> /// Deserialize from a user object /// </summary> /// <param name="uo"></param> /// <returns></returns> public static AccessControlList Deserialize(UserObject uo) { AccessControlList acl; if (uo == null || uo.AccessLevel == UserObjectAccess.None) { return(new AccessControlList()); } else if (uo.AccessLevel == UserObjectAccess.Private || uo.AccessLevel == UserObjectAccess.Public) { acl = new AccessControlList(); acl.AddReadWriteUserItem(uo.Owner); if (uo.AccessLevel == UserObjectAccess.Public) { acl.AddPublicReadItem(); } return(acl); } else if (uo.AccessLevel == UserObjectAccess.ACL) { return(Deserialize(uo.ACL)); } else { throw new Exception("Unexpected AccessLevel: " + uo.AccessLevel); } }
/// <summary> /// Update permissions to reflect a change in ownership /// </summary> /// <param name="uo"></param> /// <param name="userName"></param> public static void UpdateAclForNewOwner( UserObject uo, string oldOwner, string newOwner) { if (uo.AccessLevel != UserObjectAccess.ACL) { return; // only need to do for ACL } AccessControlList acl = AccessControlList.Deserialize(uo.ACL); acl.RemoveUserItem(oldOwner); acl.AddReadWriteUserItem(newOwner); uo.ACL = acl.Serialize(); }