public AnnotatedAclEntry ResolveAclEntry(UnresolvedAclEntry e, SecurityTargetKind targetKind) { return(new AnnotatedAclEntry { Entry = new AclEntry { Privilege = Privileges.FirstOrDefault(p => p.SID == e.PrivilegeId), Subject = _memoizer.Memoize(new { e.SubjectId }, sid => SubjectProviders.Select(p => p.Find(sid.SubjectId)).FirstOrDefault(s => s != null)), Kind = e.Allow ? AclEntryKind.Allow : AclEntryKind.Deny }, InheritedFrom = e.IsInherited ? ResolveTarget(e.SourceTarget, targetKind) : null }); }
public SecurityTarget ResolveTarget(BigTuple <Guid> id, SecurityTargetKind kind) { if (id.IsEmpty) { return(null); } var providers = kind == null ? null : _objectProvidersByKind.Value; var kinds = kind == null?EnumerableEx.Return <SecurityObjectKind>(null).Repeat() : kind.ObjectKindsInOrder; return(new SecurityTarget( id.AsEnumerable() .Zip(kinds, (i, k) => _memoizer.Memoize(new { objectId = i }, _ => (k == null ? ObjectProviders : providers[k]) .EmptyIfNull() .Select(p => p.Find(i)) .Where(obj => obj != null) .FirstOrDefault())) .ToList())); }
public IEnumerable <SecurityPrivilege> PrivilegesFor(SecurityTargetKind targetKind) { return(Privileges.Where(p => p.AppliesTo(targetKind))); }
public static IEnumerable <AnnotatedAclEntry> ResolveAcl <TDomain>(this IEnumerable <UnresolvedAclEntry> source, ISecurityService <TDomain> sec, SecurityTargetKind targetKind) { return(source.Select(e => sec.ResolveAclEntry(e, targetKind))); }
public static IQueryable <BigTuple <Guid> > AllGrantedTargets <TDomain>( this ISecurityService <TDomain> service, ISecuritySubject subject, SecurityPrivilege privilege, SecurityTargetKind kind) { return(service.AllGrantedTargets(subject, privilege, kind.ObjectKindsInOrder.Count())); }
public static IQueryable <BigTuple <Guid> > AllGrantedTargets <TDomain>( this ISecurityService <TDomain> service, ISecuritySubject subject, Expression <Func <Guid, bool> > privilegeFilter, SecurityTargetKind kind) { return(service.AllGrantedTargets(subject, privilegeFilter, kind.ObjectKindsInOrder.Count())); }
public static bool AppliesTo(this SecurityPrivilege priv, SecurityTargetKind targetKind) { //Contract.Requires( priv != null ); return(targetKind == null ? false : targetKind.ApplicablePrivilegeSets.Any(priv.BelongsTo)); }