private void SendIssueToSubscribers(EntityUpdate update) { var issueQuery = new EntityQuery2(EntityConsts.Issue, update.Id.Value); issueQuery.AllProperties = true; issueQuery.Include(EntityConsts.Magazine, Roles.Issue); issueQuery.Include(NbuLibrary.Core.Domain.File.ENTITY, Roles.Content); var issue = _repository.Read(issueQuery); var magazine = issue.GetSingleRelation(EntityConsts.Magazine, Roles.Issue).Entity; var subscribersQuery = new EntityQuery2(User.ENTITY); var relQuery = new RelationQuery(EntityConsts.Magazine, Roles.Subscriber, magazine.Id); relQuery.RelationRules.Add(new Condition("IsActive", Condition.Is, true)); subscribersQuery.WhereRelated(relQuery); subscribersQuery.AllProperties = true; var subscribers = _repository.Search(subscribersQuery).Select(e => new User(e)); var contents = issue.GetManyRelations(NbuLibrary.Core.Domain.File.ENTITY, Roles.Content).Select(r => new File(r.Entity)); var template = _templateService.Get(new Guid(NotificationTemplates.NEW_ISSUE)); string subject = null, body = null; Dictionary <string, Entity> templateContext = new Dictionary <string, Entity>(StringComparer.InvariantCultureIgnoreCase); templateContext.Add("Magazine", magazine); templateContext.Add("Issue", issue); _templateService.Render(template, templateContext, out subject, out body); _notificationService.SendNotification(true, subscribers, subject, body, contents, new Relation[] { new Relation(Notification.ROLE, issue) }); }
public bool HasAccess(User user, int fileId, FileAccessType accessType, Guid?token = null) { if (user.UserType == UserTypes.Admin) { return(true); } else if (_securityService.HasModulePermission(user, FilesModule.Id, Permissions.ManageAll)) { return(true); } var q = new EntityQuery2(File.ENTITY, fileId); q.Include(User.ENTITY, Roles.Access); var relQuery = new RelationQuery(User.ENTITY, Roles.Access, user.Id); relQuery.RelationRules.Add(new Condition("Type", Condition.Is, accessType)); q.WhereRelated(relQuery); var e = _repository.Read(q); if (e == null) { return(false); } var file = new File(e); if (file.Access == null) { return(false); } return(HasAccessInternal(user, file.Access, token)); }
public async Task <RelationList> GetRelationAsync(IList <string> relationIds) { var relationQuery = new RelationQuery() { }; foreach (var item in relationIds) { relationQuery.RelationId.Add(item); } var response = await _client.GetRelationAsync(relationQuery); return(Task.FromResult(response).Result); }
public bool HasAccess(User user, int fileId, FileAccessType accessType, Guid? token = null) { if (user.UserType == UserTypes.Admin) return true; else if (_securityService.HasModulePermission(user, FilesModule.Id, Permissions.ManageAll)) return true; var q = new EntityQuery2(File.ENTITY, fileId); q.Include(User.ENTITY, Roles.Access); var relQuery = new RelationQuery(User.ENTITY, Roles.Access, user.Id); relQuery.RelationRules.Add(new Condition("Type", Condition.Is, accessType)); q.WhereRelated(relQuery); var e = _repository.Read(q); if (e == null) return false; var file = new File(e); if (file.Access == null) return false; return HasAccessInternal(user, file.Access, token); }
public void Test_EntityRepo_SearchRelated() { var dbService = new TestDatabaseService(); var repository = new EntityRepository(dms, dbService, new SequenceProvider(dbService)); using (var ctx = dbService.GetDatabaseContext(true)) { #region prepare data var jordan = new Author() { FirstName = "Robert", LastName = "Jordan", IsAlive = false, Born = new DateTime(1948, 10, 17), Rating = 10.0m }; var feist = new Author() { FirstName = "Raymond", LastName = "Feist", IsAlive = true, Born = new DateTime(1963, 2, 14), Rating = 6.7m }; var fb1 = new Book() { Title = "The Apprentice", Price = 19.90m }; var fb2 = new Book() { Title = "The Magician", Price = 17.10m }; var jb1 = new Book() { Title = "The Shadow is Rising", Price = 21.15m }; var jb2 = new Book() { Title = "The Eye of the World", Price = 25.80m }; repository.Create(jordan); repository.Create(feist); repository.Create(fb1); repository.Create(fb2); repository.Create(jb1); repository.Create(jb2); repository.Attach(feist, new Relation("author", fb1)); repository.Attach(feist, new Relation("author", fb2)); repository.Attach(jordan, new Relation("author", jb1)); repository.Attach(jordan, new Relation("author", jb2)); #endregion EntityQuery2 query = new EntityQuery2("book"); query.AllProperties = true; var fq = new RelationQuery("author", "author", feist.Id); query.RelatedTo.Add(fq); var res = repository.Search(query); Assert.AreEqual(2, res.Count()); Assert.IsNotNull(res.First(b => b.GetData<string>("title") == fb1.Title)); Assert.IsNotNull(res.First(b => b.GetData<string>("title") == fb2.Title)); query.Include("author", "author"); res = repository.Search(query); Assert.AreEqual(2, res.Count()); Assert.IsNotNull(res.First(b => b.GetData<string>("title") == fb1.Title)); Assert.IsNotNull(res.First(b => b.GetData<string>("title") == fb2.Title)); } }
private void SendIssueToSubscribers(EntityUpdate update) { var issueQuery = new EntityQuery2(EntityConsts.Issue, update.Id.Value); issueQuery.AllProperties = true; issueQuery.Include(EntityConsts.Magazine, Roles.Issue); issueQuery.Include(NbuLibrary.Core.Domain.File.ENTITY, Roles.Content); var issue = _repository.Read(issueQuery); var magazine = issue.GetSingleRelation(EntityConsts.Magazine, Roles.Issue).Entity; var subscribersQuery = new EntityQuery2(User.ENTITY); var relQuery = new RelationQuery(EntityConsts.Magazine, Roles.Subscriber, magazine.Id); relQuery.RelationRules.Add(new Condition("IsActive", Condition.Is, true)); subscribersQuery.WhereRelated(relQuery); subscribersQuery.AllProperties = true; var subscribers = _repository.Search(subscribersQuery).Select(e => new User(e)); var contents = issue.GetManyRelations(NbuLibrary.Core.Domain.File.ENTITY, Roles.Content).Select(r => new File(r.Entity)); var template = _templateService.Get(new Guid(NotificationTemplates.NEW_ISSUE)); string subject = null, body = null; Dictionary<string, Entity> templateContext = new Dictionary<string, Entity>(StringComparer.InvariantCultureIgnoreCase); templateContext.Add("Magazine", magazine); templateContext.Add("Issue", issue); _templateService.Render(template, templateContext, out subject, out body); _notificationService.SendNotification(true, subscribers, subject, body, contents, new Relation[] { new Relation(Notification.ROLE, issue) }); }