public virtual bool CanEditField(IDeferredItem <TItem> item, INamedField <TItem> field)
        {
            Func <IRestUser, bool> authorizePredicate = GetFieldAuthorizePredicate(field.Name);

            if (authorizePredicate != null)
            {
                return(authorizePredicate.Invoke(_stem.User)); // TODO: item
            }
            return(AllowAllChecker.CanEditField(item, field));
        }
Пример #2
0
        public async Task SetMappedValuesAsync([NotNull] IDeferredItem <TItem> deferredItem, [NotNull] RestItemData itemData)
        {
            foreach (KeyValuePair <string, object> kvp in itemData)
            {
                if (!_fieldProvider.FieldExists(kvp.Key))
                {
                    throw new FieldNotFoundException(kvp.Key, false);
                }

                IFieldWriter <TItem> fieldWriter = _fieldProvider.GetWriter(kvp.Key);
                if (fieldWriter == null)
                {
                    throw new FieldOperationNotAllowedException(kvp.Key, FieldOperation.Write);
                }

                var namedField = new NamedField <TItem>(kvp.Key, _fieldProvider);
                if (!_authChecker.CanEditField(deferredItem, namedField))
                {
                    throw new NotAuthorizedForFieldException(AuthorizableVerb.Edit, kvp.Key);
                }

                await fieldWriter.SetValueAsync(deferredItem, kvp.Value, _dataTransaction);
            }
        }