public bool RevokeRole(IRole role, string username) { bool isSuccessful = false; if (Roles.ContainsKey(role)) { IRoleInstance roleInstance = Roles[role]; if (roleInstance.AuthorizedUsers.Contains(username, StringComparer.CurrentCultureIgnoreCase)) { if (role.Equals(Role.sysadmin) && roleInstance.AuthorizedUsers.Count == 1) { throw new SecurityException(ErrorHandling.ErrorCodes.Security.LAST_SYSTEM_USER); } int index = roleInstance.AuthorizedUsers.BinarySearch(username, StringComparer.CurrentCultureIgnoreCase); if (index == -1) { roleInstance.AuthorizedUsers.Sort(); index = roleInstance.AuthorizedUsers.BinarySearch(username, StringComparer.CurrentCultureIgnoreCase); } if (index >= 0) { roleInstance.AuthorizedUsers.RemoveAt(index); } isSuccessful = true; } } return(isSuccessful); }
public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) { writer.WriteStartObject(); if (value is IResourceItem) { IResourceItem resourceItem = value as IResourceItem; if (resourceItem != null) { writer.WritePropertyName("ResourceId"); serializer.Serialize(writer, resourceItem.ResourceId); writer.WritePropertyName("SecurityInformationType"); serializer.Serialize(writer, resourceItem.SecurityInformationType); writer.WritePropertyName("ClusterName"); serializer.Serialize(writer, resourceItem.ClusterName); writer.WritePropertyName("Roles"); writer.WriteStartArray(); foreach (var kvp in resourceItem.Roles) { writer.WriteStartArray(); serializer.Serialize(writer, kvp.Key); serializer.Serialize(writer, kvp.Value); writer.WriteEndArray(); } writer.WriteEndArray(); writer.WritePropertyName("SubResources"); writer.WriteStartArray(); foreach (ResourceId resourceId in resourceItem.SubResources) { serializer.Serialize(writer, resourceId); } writer.WriteEndArray(); } } else if (value is IRole) { IRole role = value as IRole; if (role != null) { writer.WritePropertyName("RoleName"); serializer.Serialize(writer, role.RoleName); writer.WritePropertyName("RoleType"); serializer.Serialize(writer, role.RoleType); writer.WritePropertyName("SecurityInformationType"); serializer.Serialize(writer, role.SecurityInformationType); writer.WritePropertyName("Permissions"); writer.WriteStartArray(); foreach (Permission permission in role.Permissions) { serializer.Serialize(writer, permission); } writer.WriteEndArray(); } } else if (value is User) { User user = value as User; if (user != null) { writer.WritePropertyName("UserName"); serializer.Serialize(writer, user.Username); writer.WritePropertyName("SecurityInformationType"); serializer.Serialize(writer, user.SecurityInformationType); } } else if (value is IRoleInstance) { IRoleInstance roleInstance = value as IRoleInstance; if (roleInstance != null) { writer.WritePropertyName("SecurityInformationType"); serializer.Serialize(writer, roleInstance.SecurityInformationType); writer.WritePropertyName("AuthorizedUsers"); writer.WriteStartArray(); foreach (string user in roleInstance.AuthorizedUsers) { serializer.Serialize(writer, user); } writer.WriteEndArray(); } } else if (value is Permission) { Permission permission = value as Permission; if (permission != null) { writer.WritePropertyName("OperationType"); serializer.Serialize(writer, permission.OperationType); writer.WritePropertyName("ResourceType"); serializer.Serialize(writer, permission.ResourceType); writer.WritePropertyName("SecurityInformationType"); serializer.Serialize(writer, permission.SecurityInformationType); } } else if (value is ResourceId) { ResourceId resourceId = value as ResourceId; if (resourceId != null) { writer.WritePropertyName("Name"); serializer.Serialize(writer, resourceId.Name); writer.WritePropertyName("ResourceType"); serializer.Serialize(writer, resourceId.ResourceType); writer.WritePropertyName("SecurityInformationType"); serializer.Serialize(writer, resourceId.SecurityInformationType); } } writer.WriteEndObject(); }