string IGridDefinition.ToColumnJson(IFieldAccessService accessService)
        {
            var rights =
                new Cache <IGridColumn, AccessRight>(col => accessService.RightsFor(null, col.Accessor.InnerProperty));

            var builder = new StringBuilder();

            builder.Append("[");
            var columns = _columns.Where(col => !rights[col].Equals(AccessRight.None)).OrderByDescending(x => x.IsFrozen).ToList();

            for (var i = 0; i < columns.Count - 1; i++)
            {
                var column = columns[i];
                column.WriteColumn(builder, rights[column]);
                builder.Append(", ");
            }

            var lastColumn = columns.Last();

            lastColumn.WriteColumn(builder, rights[lastColumn]);

            builder.Append("]");

            return(builder.ToString());
        }
예제 #2
0
        public FormLineExpression <T> Build(Expression <Func <T, object> > expression, T model = null)
        {
            var request = new ElementRequest(expression.ToAccessor())
            {
                Model = model ?? _request.Get <T>()
            };

            var accessRight = _fieldAccessService.RightsFor(request);
            var chrome      = _library.Get <IFieldChrome>(_profile.Name);

            return(new FormLineExpression <T>(chrome, _generator, request).Access(accessRight));
        }
예제 #3
0
 public static bool HasRights <T>(this IFieldAccessService fieldAccessService, T model, Expression <Func <T, object> > expression, AccessRight requiredRights)
 {
     return(fieldAccessService.RightsFor(model, expression.ToAccessor().InnerProperty) >= requiredRights);
 }
예제 #4
0
 public static AccessRight RightsFor <T>(this IFieldAccessService fieldAccessService, T model, Expression <Func <T, object> > expression)
 {
     return(fieldAccessService.RightsFor(model, expression.ToAccessor().InnerProperty));
 }
        public Projection <T> ToProjection(IFieldAccessService accessService)
        {
            Func <Accessor, bool> filter = a => !accessService.RightsFor(null, a.InnerProperty).Equals(AccessRight.None);

            return(Projection.Filter(filter));
        }
        public UpdatePropertyResultViewModel EditProperty(UpdatePropertyModel <TEntity> updatePropertyModel)
        {
            var model = _repository.Find <TEntity>(updatePropertyModel.Id);
            // TODO -- what if it isn't found?
            // " ? "
            //updatePropertyModel.Formatter = _displayFormatter;

            EditPropertyResult editResult;

            try
            {
                var handler = _handlers.FirstOrDefault(x => x.CanEdit(updatePropertyModel));

                if (handler == null)
                {
                    throw new ApplicationException(
                              "No handler for property {0} on type {1}".ToFormat(updatePropertyModel.PropertyName,
                                                                                 typeof(Entity).FullName));
                }

                var property = handler.FindProperty(updatePropertyModel);

                var rights = _fieldAccess.RightsFor(model, property.Property);
                if (!rights.Write)
                {
                    var updatePropertyViewModel = new UpdatePropertyResultViewModel
                    {
                        Message       = FastPackKeys.NOT_AUTHORIZED.ToString(),
                        ShouldRefresh = false,
                        Success       = false
                    };
                    updatePropertyViewModel.AddError(new AjaxError {
                        field = property.Property.Name, message = FastPackKeys.NOT_AUTHORIZED.ToString()
                    });
                    return(updatePropertyViewModel);
                }


                editResult = handler.EditProperty(updatePropertyModel, model);
            }
            catch (FormatException ex)
            {
                return(createResultForConversionFailure(updatePropertyModel, ex));
            }
            catch (InvalidPropertyConversionException ex)
            {
                return(createResultForConversionFailure(updatePropertyModel, ex));
            }

            if (editResult.WasNotApplied)
            {
                var updatePropertyResultViewModel = new UpdatePropertyResultViewModel
                {
                    Success = false
                };
                updatePropertyResultViewModel.AddErrors(editResult.ToValidationErrors());
                return(updatePropertyResultViewModel);
            }

            var returnValue = propertySaveResult(model, editResult);

            if (returnValue.Success)
            {
                _logger.Log(model, editResult);
            }

            return(returnValue);
        }