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);
            }
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 7
0
        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];
                }
            }
        }