/// <summary> /// retrieve a clone of the completemetadata, applying evental security restrictions associated for a given user /// </summary> /// <param name="originalMetadata"></param> /// <param name="user"></param> /// <returns></returns> public static CompleteApplicationMetadataDefinition CloneSecuring(this CompleteApplicationMetadataDefinition originalMetadata, InMemoryUser user) { var schemas = originalMetadata.Schemas(); var securedSchemas = new Dictionary <ApplicationMetadataSchemaKey, ApplicationSchemaDefinition>(); foreach (var applicationSchema in schemas) { if (applicationSchema.Value.IsWebPlatform()) { continue; } var securedMetadata = originalMetadata.ApplyPolicies(applicationSchema.Key, user, ClientPlatform.Mobile); securedSchemas.Add(securedMetadata.Schema.GetSchemaKey(), securedMetadata.Schema); } return(new CompleteApplicationMetadataDefinition( originalMetadata.Id, originalMetadata.ApplicationName, originalMetadata.Title, originalMetadata.Entity, originalMetadata.IdFieldName, originalMetadata.Parameters, securedSchemas, originalMetadata.DisplayableComponents, originalMetadata.Service)); }
private static bool IsAllowedOnApplication(this InMemoryUser user, CompleteApplicationMetadataDefinition application) { var appRoles = RoleManager.ActiveApplicationRoles(); bool isAppRoleActive = appRoles.Contains(application.Role); return(!isAppRoleActive || user.Roles.Any(r => r.Name == application.Role)); }
public static bool IsMobileSupported(this CompleteApplicationMetadataDefinition metadata) { if (metadata.Parameters.ContainsKey(ApplicationMetadataConstants.MobileDisabled)) { return(false); } return(metadata.Schemas().Any(s => s.Key.Platform != ClientPlatform.Web)); }
/// <summary> /// If there´s a schema named print, use it, otherwise fallback to detail /// </summary> /// <param name="compositionSchema"></param> /// <param name="compositionApplication"></param> /// <returns></returns> private static ApplicationSchemaDefinition GetPrintSchema(ApplicationCompositionSchema compositionSchema, CompleteApplicationMetadataDefinition compositionApplication, ApplicationSchemaDefinition detailSchema, ApplicationSchemaDefinition listSchema) { var applicationSchemaDefinitions = compositionApplication.Schemas(); var printKey = new ApplicationMetadataSchemaKey(compositionSchema.PrintSchema, compositionSchema.RenderMode, ClientPlatform.Web); if (applicationSchemaDefinitions.ContainsKey(printKey)) { return(applicationSchemaDefinitions[printKey]); } return(detailSchema ?? listSchema); }
public EntityDetailData(CompleteApplicationMetadataDefinition application, string idValue = null) { this._idValue = idValue; this._idField = application.IdFieldName; this._entityName = application.Entity; //TODO: I've hacked this line to use the web schema //because currently we don't have an ENTITY METADATA //concept. As soons as we have it, the list of ATTRIBUTES //should be used instead of the list of FORM FIELDS. // this._projectionFields = string.Join(",", application.WebSchema.Fields.Select(f => f.Attribute)); }
// public bool IsUserInteractionEnabled { // get { // var mobileApplicationSchema = _schema as MobileApplicationSchema; // return mobileApplicationSchema == null || mobileApplicationSchema.IsUserInteractionEnabled; // } // } // public int? FetchLimit { // get { return Schema is MobileApplicationSchema ? ((MobileApplicationSchema)Schema).FetchLimit : (int?)null; } // } public static ApplicationMetadata CloneSecuring(CompleteApplicationMetadataDefinition application, ApplicationSchemaDefinition securedSchema) { return(new ApplicationMetadata( application.Id, application.ApplicationName, application.Title, application.Entity, application.IdFieldName, securedSchema, application.Service )); }
// public static ApplicationMetadataDefinition GetMetadata(this CompleteApplicationMetadataDefinition definition) { // var mobileSchema = BuildMobileSchema(definition.Schemas); // return new ApplicationMetadataDefinition( // definition.Id, // definition.Name, // definition.Entity, // definition.Title, // definition.IdFieldName, // mobileSchema); // } public static ApplicationSchemaDefinition MobileSchema(this CompleteApplicationMetadataDefinition definition) { var schema = definition.ExtensionParameter("Schema"); if (schema != null) { return((ApplicationSchemaDefinition)schema); } ApplicationSchemaDefinition mobileSchema = BuildMobileSchema(definition.SchemasList, definition.Parameters); definition.ExtensionParameter("Schema", mobileSchema); return(mobileSchema); }
public static ApplicationSchemaDefinition SchemaForPlatform([NotNull] this CompleteApplicationMetadataDefinition application, ApplicationMetadataSchemaKey metadataSchemaKey) { if (application == null) { throw new ArgumentNullException("application"); } ApplicationSchemaDefinition resultingSchema; if (!application.Schemas().TryGetValue(metadataSchemaKey, out resultingSchema)) { throw new InvalidOperationException(String.Format(NoSchemaFound, metadataSchemaKey, application.ApplicationName)); } return((ApplicationSchemaDefinition)resultingSchema); }
public static ApplicationMetadata ApplyPolicies([NotNull] this CompleteApplicationMetadataDefinition application, ApplicationMetadataSchemaKey schemaKey, [NotNull] InMemoryUser user, ClientPlatform platform) { if (application == null) { throw new ArgumentNullException("application"); } if (user == null) { throw new ArgumentNullException("user"); } return(new ApplicationMetadataPolicyApplier(application, schemaKey, user, platform).Apply()); }
public ApplicationMetadataPolicyApplier([NotNull] CompleteApplicationMetadataDefinition application, ApplicationMetadataSchemaKey schemaKey, [NotNull] InMemoryUser user, ClientPlatform platform) { if (application == null) { throw new ArgumentNullException("application"); } if (user == null) { throw new ArgumentNullException("user"); } _application = application; _user = user; _schemaKey = schemaKey; _platform = platform; _result = new Lazy <ApplicationMetadata>(ApplyImpl); }
private static ApplicationSchemaDefinition GetDetailSchema(CompleteApplicationMetadataDefinition compositionApplication, ApplicationCompositionSchema compositionSchema) { if (compositionSchema.DetailSchema == "") { //This means that the composition is only needed for list visualization return(null); } var detailKey = new ApplicationMetadataSchemaKey(compositionSchema.DetailSchema, compositionSchema.RenderMode, ClientPlatform.Web); var applicationSchemaDefinitions = compositionApplication.Schemas(); if (!applicationSchemaDefinitions.ContainsKey(detailKey)) { throw ExceptionUtil.MetadataException( "detail composition schema {0} not found for application {1}. Use \"\" if you want to specify that this is used only for list", detailKey, compositionApplication.ApplicationName); } return(applicationSchemaDefinitions[detailKey]); }
public static bool IsSupportedOnPlatform([NotNull] this CompleteApplicationMetadataDefinition application, ClientPlatform platform) { if (application == null) { throw new ArgumentNullException("application"); } switch (platform) { case ClientPlatform.Web: return(application.IsWebSupported()); case ClientPlatform.Mobile: return(application.IsMobileSupported()); default: throw new ArgumentOutOfRangeException(platform.ToString()); } }
private static ApplicationSchemaDefinition GetListSchema(ApplicationCompositionSchema applicationCompositionSchema, CompleteApplicationMetadataDefinition compositionApplication) { var collectionSchema = (ApplicationCompositionCollectionSchema)applicationCompositionSchema; var listKey = new ApplicationMetadataSchemaKey(collectionSchema.CollectionProperties.ListSchema, applicationCompositionSchema.RenderMode, ClientPlatform.Web); return(compositionApplication.Schemas()[listKey]); }
public static string ToJson(this CompleteApplicationMetadataDefinition applicationSchemaDefinition) { return(JsonConvert.SerializeObject(applicationSchemaDefinition, JsonParser.SerializerSettings)); // return new JsonApplicationMetadataParser().ToJson(ApplicationSchemaDefinition); }
// private static ApplicationSchemaDefinition ParseApplication(JObject json) // { // JsonConvert.DeserializeObject<ApplicationSchemaDefinition>(json, new MetadataConverter()); // // var originalMetadata = json.ToObject<ApplicationSchemaDefinition>(); // // return originalMetadata; // //// return new ApplicationSchemaDefinition( //// Guid.Parse(json.Value<string>("id")), //// json.Value<string>("name"), //// json.Value<string>("title"), //// json.Value<string>("entity"), //// json.Value<string>("idFieldName"), //// ParseSchema(json.Value<JObject>("schema"))); // } // // class MetadataConverter : CustomCreationConverter<ApplicationSchemaDefinition> // { // public override ApplicationSchemaDefinition Create(Type objectType) // { // throw new NotImplementedException(); // } // } // // private static MobileApplicationSchema ParseSchema(JObject mobile) // { // var isUserInteractionEnabled = mobile.Value<bool>("isUserInteractionEnabled"); // // MobileApplicationSchema.Preview title, subtitle, featured, excerpt; // title = subtitle = featured = excerpt = null; // // var preview = mobile.Value<JObject>("previewTitle"); // if (null != preview) title = ParsePreview(preview); // // preview = mobile.Value<JObject>("previewSubtitle"); // if (null != preview) subtitle = ParsePreview(preview); // // preview = mobile.Value<JObject>("previewFeatured"); // if (null != preview) featured = ParsePreview(preview); // // preview = mobile.Value<JObject>("previewExcerpt"); // if (null != preview) excerpt = ParsePreview(preview); // // var fields = ParseFields(mobile.Property("fields").Values()); // var compositions = ParseCompositions(mobile.Property("compositions").Values()); // // return new MobileApplicationSchema( // isUserInteractionEnabled, // fields, // compositions, // title, // subtitle, // featured, // excerpt); // } // // private static MobileApplicationSchema.Preview ParsePreview(JToken json) // { // return new MobileApplicationSchema.Preview( // json.Value<string>("label"), // json.Value<string>("attribute")); // } // // private static IEnumerable<ApplicationFieldDefinition> ParseFields(IEnumerable<JToken> json) // { // var tokens = json as IList<JToken> ?? json.ToList(); // // return tokens // .Cast<JObject>() // .Select(j => new ApplicationFieldDefinition(j.Value<string>("attribute"), // j.Value<string>("label"), // j.Value<bool>("isRequired"), // j.Value<bool>("isReadOnly"), // JsonWidgetParser.Parse(j.Value<JObject>("widget")))) // .ToList(); // } // // private static IEnumerable<ApplicationComposition> ParseCompositions(IEnumerable<JToken> json) // { // var tokens = json as IList<JToken> ?? json.ToList(); // // return tokens // .Cast<JObject>() // .Select(j => new ApplicationComposition( // j.Value<string>("from"), // ParseEntityAssociation(j.Value<JObject>("entityAssociation")))) // .ToList(); // } // // private static EntityAssociation ParseEntityAssociation(JToken json) // { // return new EntityAssociation( // json.Value<string>("to"), // ParseEntityAssociationAttributes(json.Value<JArray>("attributes"))); // } // // private static IEnumerable<EntityAssociationAttribute> ParseEntityAssociationAttributes(IEnumerable<JToken> json) // { // var tokens = json as IList<JToken> ?? json.ToList(); // // return tokens // .Cast<JObject>() // .Select(j => new EntityAssociationAttribute( // j.Value<string>("to"), // j.Value<string>("from"), // j.Value<string>("literal"))) // .ToList(); // } // public string ToJson(CompleteApplicationMetadataDefinition ApplicationSchemaDefinition) { return(JsonConvert.SerializeObject(ApplicationSchemaDefinition, JsonParser.SerializerSettings())); }
public static ApplicationMetadata ApplyPoliciesWeb([NotNull] this CompleteApplicationMetadataDefinition application, ApplicationMetadataSchemaKey schemaKey) { return(new ApplicationMetadataPolicyApplier(application, schemaKey, SecurityFacade.CurrentUser(), ClientPlatform.Web).Apply()); }
public static bool IsWebSupported(this CompleteApplicationMetadataDefinition metadata) { return(metadata.Schemas().Any(s => s.Key.Platform != ClientPlatform.Mobile)); }