From 9b703dbd60a40a59d1e7a7442ee51f42b8c8abfb Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 23 Jul 2020 19:56:08 +0000 Subject: [PATCH] --- server/AyaNova/biz/NotifyEventProcessor.cs | 33 +++++++++++++++++++++ server/AyaNova/biz/NotifySubscriptionBiz.cs | 17 +++++++---- server/AyaNova/biz/UserBiz.cs | 2 ++ 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/server/AyaNova/biz/NotifyEventProcessor.cs b/server/AyaNova/biz/NotifyEventProcessor.cs index 8ff0bcfc..2712f950 100644 --- a/server/AyaNova/biz/NotifyEventProcessor.cs +++ b/server/AyaNova/biz/NotifyEventProcessor.cs @@ -343,6 +343,39 @@ namespace AyaNova.Biz //ServiceBankDepleted break; + case AyaType.User: + //This one's a little different, if user has had roles changed, then pre-existing subs may not be allowed anymore + //Remove any notification subscriptions user doesn't have rights to: + if (((User)originalObject).Roles != ((User)newObject).Roles) + { + var DeleteList = new List(); + var NewRoles = ((User)newObject).Roles; + //iterate subs and remove any user shouldn't have + var userSubs = await ct.NotifySubscription.Where(z => z.UserId == newObject.Id).ToListAsync(); + foreach (var sub in userSubs) + { + if (sub.AyaType != AyaType.NoType) + { + //check if user has rights to it or not still + //must have read rights to be valid + if (!AyaNova.Api.ControllerHelpers.Authorized.HasAnyRole(NewRoles, sub.AyaType)) + { + //no rights whatsoever, so delete it + DeleteList.Add(sub.Id); + } + } + } + if (DeleteList.Count > 0) + { + var NSB = NotifySubscriptionBiz.GetBiz(ct); + foreach (var l in DeleteList) + { + await NSB.DeleteAsync(l); + } + } + } + break; + } diff --git a/server/AyaNova/biz/NotifySubscriptionBiz.cs b/server/AyaNova/biz/NotifySubscriptionBiz.cs index bc9ab9f3..f3d7d3a8 100644 --- a/server/AyaNova/biz/NotifySubscriptionBiz.cs +++ b/server/AyaNova/biz/NotifySubscriptionBiz.cs @@ -99,7 +99,7 @@ namespace AyaNova.Biz internal async Task PutAsync(NotifySubscription putObject) { //TODO: Must remove all prior events and replace them - + NotifySubscription dbObject = await ct.NotifySubscription.SingleOrDefaultAsync(z => z.Id == putObject.Id); if (dbObject == null) { @@ -136,8 +136,7 @@ namespace AyaNova.Biz // internal async Task DeleteAsync(long id) { - throw new System.NotImplementedException("NotifySubscriptionBiz::DeleteAsync NOT IMPLEMENTED YET"); - //needs to delete notifyevent and also notifications records + using (var transaction = await ct.Database.BeginTransactionAsync()) { try @@ -157,6 +156,7 @@ namespace AyaNova.Biz await TagBiz.ProcessDeleteTagsInRepositoryAsync(ct, dbObject.Tags); //await FileUtil.DeleteAttachmentsForObjectAsync(BizType, dbObject.Id, ct); //TODO: DELETE RELATED RECORDS HERE + //all good do the commit await transaction.CommitAsync(); } @@ -171,18 +171,23 @@ namespace AyaNova.Biz - - - //////////////////////////////////////////////////////////////////////////////////////////////// //VALIDATION // private async Task ValidateAsync(NotifySubscription proposedObj) { + //############################################################################### //todo: validate subscription is valid //perhaps check if customer type user doesn't have non customer notification etc + //todo: notifysubscriptionbiz Check for duplicate before accepting new / edit in validator + //DISALLOW entirely duplicate notifications (down to email address) + //USE NAME DUPE CHECK PATTERN BELOW + //############################################################################### + + + //NOTE: In DB schema only name and serial are not nullable diff --git a/server/AyaNova/biz/UserBiz.cs b/server/AyaNova/biz/UserBiz.cs index 9a55ce8c..cd5bd13a 100644 --- a/server/AyaNova/biz/UserBiz.cs +++ b/server/AyaNova/biz/UserBiz.cs @@ -299,6 +299,8 @@ namespace AyaNova.Biz await SearchIndexAsync(dbObject, false); await TagBiz.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); await NotifyEventProcessor.HandlePotentialNotificationEvent(AyaEvent.Modified, dbObject, SnapshotOfOriginalDBObj); + + return dbObject; }