public virtual ConditionalObjectAccessPermission FilterUnfitItems(object contextObject) { try { Type objectType = contextObject.GetType(); //IObjectSpace objectSpace = ObjectSpace.FindObjectSpace(contextObject); IObjectSpace objectSpace = ObjectSpace.FindObjectSpaceByObject(contextObject); EvaluatorContextDescriptor descriptor = objectSpace != null?objectSpace.GetEvaluatorContextDescriptor(objectType) : new EvaluatorContextDescriptorDefault(objectType); ConditionalObjectAccessPermission result = new ConditionalObjectAccessPermission(); foreach (ConditionalParticularAccessItem item in AccessItemList) { bool itemFits = string.IsNullOrEmpty(item.Condition); if (!itemFits && item.ObjectType == objectType) { LocalizedCriteriaWrapper wrapper = new LocalizedCriteriaWrapper(objectType, item.Condition); wrapper.UpdateParametersValues(contextObject); ExpressionEvaluator evaluator = new ExpressionEvaluator(descriptor, wrapper.CriteriaOperator); itemFits = evaluator.Fit(contextObject); } if (itemFits) { result.AccessItemList.Add(item); } } return(result); } catch (Exception ex) { throw new Exception(ex.ToString()); } }
public override IPermission Copy() { ConditionalObjectAccessPermission result = new ConditionalObjectAccessPermission { ObjectType = ObjectType }; foreach (ConditionalParticularAccessItem item in AccessItemList) { result.AccessItemList.Add(item); } return(result); }
static ObjectAccessPermission MergeTargetWithConditionalPermission(ObjectAccessPermission targetPermission, SecurityContextList contexts) { try { if (contexts.TargetObjectContext != null && contexts.TargetObjectContext.TargetObject != null) { object targetObject = contexts.TargetObjectContext.TargetObject; ConditionalObjectAccessPermission validatedConditionalPermission = ConditionalPermission.FilterUnfitItems(targetObject); return((ObjectAccessPermission)validatedConditionalPermission.Union <ObjectAccessPermission>(targetPermission)); } return(targetPermission); } catch (Exception ex) { throw new Exception(ex.ToString()); } }