private void AddRoles(SkautIsUserPart userPart) { var workContext = this.workContextAccessor.GetContext(); bool?rolesAssigned = workContext.GetState <bool?>(RolesAssignedCacheKey); if (!rolesAssigned.HasValue || !rolesAssigned.Value) { if (userPart.Has <IUserRoles>()) { var rolesPart = userPart.As <IUserRoles>(); var rolesToAssign = this.GetRolesAssignedByMembership(userPart) .Union(this.GetRolesAssignedBySkautIsRoles(userPart)) .Distinct() .ToArray(); foreach (var role in rolesToAssign) { if (!rolesPart.Roles.Contains(role)) { rolesPart.Roles.Add(role); } } } // Cache assigned roles workContext.SetState(RolesAssignedCacheKey, (bool?)true); } }