public TypePermissions <TSession> Clone() { var copy = new TypePermissions <TSession>(); foreach (var atc in accessTypeConditions) { copy.accessTypeConditions.Add(atc.Key, new List <PermissionCondition <TSession> >(atc.Value)); } return(copy); }
public void AddPermission <T>(AccessType access, Func <T, TSession, bool> conditionFunc, Func <TSession, Expression <Func <T, bool> > > conditionCreateExpression) { if (!typePermissions.TryGetValue(typeof(T), out var rp)) { typePermissions.Add(typeof(T), rp = new TypePermissions <TSession>()); } var untypedConditionFunc = conditionFunc != null ? new Func <object, TSession, bool>((record, session) => conditionFunc((T)record, session)) : null; rp.AddPermission(access, untypedConditionFunc == null || conditionCreateExpression == null ? null : new PermissionCondition <TSession>(untypedConditionFunc, conditionCreateExpression)); }
public void AddPermissions(TypePermissions <TSession> tp) { foreach (var atc in tp.accessTypeConditions) { if (accessTypeConditions.TryGetValue(atc.Key, out var currentAtc)) { if (currentAtc.Count == 1 && currentAtc.First() == null) { continue; } if (atc.Value.Count == 1 && atc.Value.First() == null) { currentAtc.Clear(); } currentAtc.AddRange(atc.Value); } else { accessTypeConditions.Add(atc.Key, new List <PermissionCondition <TSession> >(atc.Value)); } } }