/// <summary> /// The this. /// </summary> /// <param name="accessControl"> /// The access control. /// </param> /// <returns> /// The <see cref="Entry"/>. /// </returns> public Entry this[AccessControl accessControl] { get { Entry entry; if(!this.entryByObjectId.TryGetValue(accessControl.Id, out entry) || entry.CacheId != accessControl.CacheId) { entry = new Entry(accessControl); this.entryByObjectId[accessControl.Id] = entry; } return entry; } }
/// <summary> /// Initializes a new instance of the <see cref="Entry"/> class. /// </summary> /// <param name="accessControl"> /// The access control. /// </param> internal Entry(AccessControl accessControl) { this.CacheId = accessControl.CacheId; // TODO: Nested groups var users = accessControl.SubjectGroups.SelectMany(x => x.Members).ToList(); users.AddRange(accessControl.Subjects); this.UserObjectIds = new HashSet<ObjectId>(users.Select(x => x.Id)); this.RoleUniqueId = accessControl.Role.UniqueId; }