public static void AppendNewPermission(TweezersObject newObject) { TweezersObject rolesObj = TweezersSchemaFactory.Find(RolesSchemaName, true, true); TweezersFieldProperties fieldProperties = Schemas.PermissionTemplateFieldProperties.Deserialize <TweezersFieldProperties>(); fieldProperties.Name = newObject.CollectionName; fieldProperties.DisplayName = newObject.PluralName; rolesObj.Fields["permissions"].FieldProperties.ObjectReference.Fields.Add(newObject.CollectionName, new TweezersField() { FieldProperties = fieldProperties }); SafeAddSchema(rolesObj); DefaultPermission permission = newObject.DefaultPermission; TweezersMultipleResults <JObject> roles = rolesObj.FindInDb(TweezersSchemaFactory.DatabaseProxy, FindOptions <JObject> .Default(0, int.MaxValue), true); foreach (JObject role in roles.Items) { role["permissions"][newObject.CollectionName] = permission.ToString(); rolesObj.Update(TweezersSchemaFactory.DatabaseProxy, role["_id"].ToString(), role); } }
public ActionResult <TweezersMultipleResults <TweezersObject> > List([FromQuery] bool internalObj, [FromQuery] int skip = 0, [FromQuery] int take = 10, [FromQuery] string sortField = "", [FromQuery] string direction = "asc") { return(WrapWithAuthorizationCheck(() => { IEnumerable <TweezersObject> allMetadata = TweezersSchemaFactory.GetAll(includeInternal: internalObj); if (SchemaManagement.CanChangeSchema && internalObj) { allMetadata = allMetadata.Concat(new[] { SchemaManagement.SchemaMetadata }); } allMetadata = allMetadata .Skip(skip) .Take(take) .ToArray(); string sortFieldInternal = string.IsNullOrWhiteSpace(sortField) ? "collectionName" : sortField; IEnumerable <TweezersObject> sortedMetadata = direction == "asc" ? allMetadata.OrderBy(m => JObject.FromObject(m, Serializer.JsonSerializer)[sortFieldInternal].ToString()) : allMetadata.OrderByDescending(m => JObject.FromObject(m, Serializer.JsonSerializer)[sortFieldInternal].ToString()); return TweezersOk(TweezersMultipleResults <TweezersObject> .Create(sortedMetadata, allMetadata.Count())); }, "List", DefaultPermission.None, TweezersSchemaKey)); }
protected ActionResult <TweezersMultipleResults <JObject> > List(string collection, int skip = 0, int take = 10, string sortField = "", string direction = "asc", DefaultPermission?minimalPermission = null) { return(WrapWithAuthorizationCheck(() => { try { FindOptions <JObject> predicate = new FindOptions <JObject>() { Skip = skip, Take = take, SortField = sortField, SortDirection = direction == "asc" ? SortDirection.Ascending : SortDirection.Descending, }; TweezersObject objectMetadata = TweezersSchemaFactory.Find(collection, WithInternalObjects); TweezersMultipleResults <JObject> results = objectMetadata.FindInDb(TweezersSchemaFactory.DatabaseProxy, predicate); HandleReferenceObjects(objectMetadata, results); return TweezersOk(results); } catch (TweezersValidationException) { return TweezersNotFound(); } }, "List", minimalPermission ?? DefaultPermission.View, collection)); }
public TweezersMultipleResults <JObject> List(string collection, DBConnector.FindOptions <JObject> opts) { IMongoCollection <BsonDocument> mongoCollection = GetCollection(collection); IAsyncCursor <BsonDocument> cursor = mongoCollection.FindSync(FilterDefinition <BsonDocument> .Empty); long count = cursor.ToEnumerable() .Count(bson => opts.Predicate.Invoke(bson.ToJObject())); cursor = mongoCollection.FindSync(FilterDefinition <BsonDocument> .Empty); IEnumerable <JObject> objects = cursor.ToEnumerable() .Where(bson => opts.Predicate.Invoke(bson.ToJObject())) .Select(bson => bson.ToJObject()); IEnumerable <JObject> sortedItems; if (string.IsNullOrWhiteSpace(opts.SortField)) { sortedItems = objects; } else { sortedItems = opts.SortDirection == SortDirection.Ascending ? objects.OrderBy(obj => JToken(opts, obj)) : objects.OrderByDescending(obj => JToken(opts, obj)); } IEnumerable <JObject> sortedAndSelectedItems = sortedItems.Skip(opts.Skip).Take(opts.Take); return(TweezersMultipleResults <JObject> .Create(sortedAndSelectedItems, count)); }
public TweezersMultipleResults <JObject> List(string collection, FindOptions <JObject> opts) { if (!_localDb.ContainsKey(collection)) { _localDb[collection] = new List <JObject>(); } IEnumerable <JObject> allResults = _localDb[collection] .Where(obj => opts.Predicate.Invoke(obj)).ToArray(); IEnumerable <JObject> results = allResults .Skip(opts.Skip) .Take(opts.Take); int count = allResults.Count(); return(TweezersMultipleResults <JObject> .Create(results, count)); }
public static void DeletePermission(string deletedCollectionName) { TweezersObject rolesObj = TweezersSchemaFactory.Find(RolesSchemaName, true, true); rolesObj.Fields["permissions"].FieldProperties.ObjectReference.Fields.Remove(deletedCollectionName); SafeAddSchema(rolesObj); TweezersMultipleResults <JObject> roles = rolesObj.FindInDb(TweezersSchemaFactory.DatabaseProxy, FindOptions <JObject> .Default(0, int.MaxValue), true); foreach (JObject role in roles.Items) { JObject permissions = JObject.FromObject(role["permissions"]); permissions.Remove(deletedCollectionName); role["permissions"] = permissions; rolesObj.Update(TweezersSchemaFactory.DatabaseProxy, role["_id"].ToString(), role); } }
private static void HandleReferenceObjects(TweezersObject objectMetadata, TweezersMultipleResults <JObject> results) { IEnumerable <KeyValuePair <string, TweezersField> > fields = objectMetadata.Fields.Where(f => f.Value.FieldProperties.FieldType == TweezersFieldType.Object && !string.IsNullOrWhiteSpace(f.Value.FieldProperties.ObjectName)); Dictionary <string, TweezersObject> referenceObjects = fields .Select(f => { string key = f.Key; TweezersObject value = TweezersSchemaFactory.Find(f.Value.FieldProperties.ObjectName, true, true, true); return(new KeyValuePair <string, TweezersObject>(key, value)); }) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); foreach (var obj in referenceObjects) { IEnumerable <string> objIds = results.Items.Select(r => r[obj.Key]?.ToString()).Where(v => !string.IsNullOrWhiteSpace(v)).Distinct(); string titleFieldId = obj.Value.Fields.Single(f => f.Value.FieldProperties.UiTitle).Key; Dictionary <string, string> idToTitle = objIds.Select(id => { string title = obj.Value.GetById(TweezersSchemaFactory.DatabaseProxy, id, true)[titleFieldId] .ToString(); return(new KeyValuePair <string, string>(id, title)); }) .ToDictionary(kvp => kvp.Key, kvp => kvp.Value); foreach (JObject item in results.Items) { string refKey = item[obj.Key]?.ToString(); if (string.IsNullOrWhiteSpace(refKey)) { continue; } item[obj.Key] = idToTitle[refKey]; } } }