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)); }
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); } }