diff --git a/server/AyaNova/ControllerHelpers/Authorized.cs b/server/AyaNova/ControllerHelpers/Authorized.cs
index 14108cef..a9945336 100644
--- a/server/AyaNova/ControllerHelpers/Authorized.cs
+++ b/server/AyaNova/ControllerHelpers/Authorized.cs
@@ -11,7 +11,7 @@ namespace AyaNova.Api.ControllerHelpers
{
///
- /// User has any ops role limited or full
+ /// User has any role limited or full
///
///
///
@@ -19,6 +19,17 @@ namespace AyaNova.Api.ControllerHelpers
internal static bool HasAnyRole(IDictionary HttpContextItems, AuthorizationRoles CheckRoles)
{
AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems);
+ return HasAnyRole(currentUserRoles, CheckRoles);
+ }
+
+ ///
+ /// User has any role limited or full
+ ///
+ ///
+ ///
+ ///
+ internal static bool HasAnyRole(AuthorizationRoles currentUserRoles, AuthorizationRoles CheckRoles)
+ {
if (currentUserRoles.HasAnyFlags(CheckRoles))
return true;
return false;
@@ -35,7 +46,17 @@ namespace AyaNova.Api.ControllerHelpers
internal static bool IsAuthorizedToReadFullRecord(IDictionary HttpContextItems, AyaType objectType)
{
AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems);
+ return IsAuthorizedToReadFullRecord(currentUserRoles, objectType);
+ }
+ ///
+ /// READ FULL RECORD (not just name and id)
+ ///
+ ///
+ ///
+ ///
+ internal static bool IsAuthorizedToReadFullRecord(AuthorizationRoles currentUserRoles, AyaType objectType)
+ {
//NOTE: this assumes that if you can change you can read
if (currentUserRoles.HasAnyFlags(BizRoles.GetRoleSet(objectType).Change))
return true;
@@ -44,10 +65,10 @@ namespace AyaNova.Api.ControllerHelpers
return true;
return false;
-
-
}
+
+
///
/// CREATE
///
@@ -57,6 +78,17 @@ namespace AyaNova.Api.ControllerHelpers
internal static bool IsAuthorizedToCreate(IDictionary HttpContextItems, AyaType objectType)
{
AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems);
+ return IsAuthorizedToCreate(currentUserRoles, objectType);
+ }
+
+ ///
+ /// CREATE
+ ///
+ ///
+ ///
+ ///
+ internal static bool IsAuthorizedToCreate(AuthorizationRoles currentUserRoles, AyaType objectType)
+ {
if (currentUserRoles.HasAnyFlags(BizRoles.GetRoleSet(objectType).Change))
return true;
@@ -67,6 +99,9 @@ namespace AyaNova.Api.ControllerHelpers
}
+
+
+
///
/// MODIFY
///
@@ -78,9 +113,23 @@ namespace AyaNova.Api.ControllerHelpers
{
AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems);
long currentUserId = UserIdFromContext.Id(HttpContextItems);
+ return IsAuthorizedToModify(currentUserRoles, currentUserId, objectType, ownerId);
+ }
+
+ ///
+ /// MODIFY
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ internal static bool IsAuthorizedToModify(AuthorizationRoles currentUserRoles, long currentUserId, AyaType objectType, long ownerId = -1)
+ {
if (currentUserRoles.HasAnyFlags(BizRoles.GetRoleSet(objectType).Change))
return true;
+
if (ownerId != -1)
if (currentUserRoles.HasAnyFlags(BizRoles.GetRoleSet(objectType).EditOwn) && ownerId == currentUserId)
return true;
@@ -103,7 +152,21 @@ namespace AyaNova.Api.ControllerHelpers
{
AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems);
long currentUserId = UserIdFromContext.Id(HttpContextItems);
+ return IsAuthorizedToDelete(currentUserRoles, currentUserId, objectType, ownerId);
+ }
+
+ ///
+ /// DELETE
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ //For now just going to treat as a modify, but for maximum flexibility keeping this as a separate method in case we change our minds in future
+ internal static bool IsAuthorizedToDelete(AuthorizationRoles currentUserRoles, long currentUserId, AyaType objectType, long ownerId = 1)
+ {
if (currentUserRoles.HasAnyFlags(BizRoles.GetRoleSet(objectType).Change))
return true;
diff --git a/server/AyaNova/biz/Search.cs b/server/AyaNova/biz/Search.cs
index 16d1de6c..24065fb9 100644
--- a/server/AyaNova/biz/Search.cs
+++ b/server/AyaNova/biz/Search.cs
@@ -98,7 +98,7 @@ namespace AyaNova.Biz
}
- //Class to hold search result
+ //Class to hold search result returned to client
public class SearchResult
{
public string Name { get; set; }
@@ -106,10 +106,19 @@ namespace AyaNova.Biz
public long Id { get; set; }
}
+ // //Class to hold temporary matches during processing
+ // public class MatchingObject
+ // {
+ // public bool NameMatch { get; set; }
+ // public bool TagMatch { get; set; }
+ // public AyaTypeId TypeAndId { get; set; }
+ // }
- public static async Task> DoSearch(AyContext ct, long localeId, SearchRequestParameters searchParameters)
+
+
+ public static async Task> DoSearch(AyContext ct, long localeId, AuthorizationRoles currentUserRoles, SearchRequestParameters searchParameters)
{
List ResultList = new List();
@@ -289,9 +298,18 @@ namespace AyaNova.Biz
}
//REMOVE ANY ITEMS THAT USER IS NOT PERMITTED TO READ
- foreach (AyaTypeId t in MatchingObjects)
+ //If it's a name only search then all is allowed
+ //If it's not a name only search then rights need to be checked for full read because even if it's just a tags search that's part of the full record of the object
+ if (!searchParameters.NameOnly)
{
+ foreach (AyaTypeId t in MatchingObjects)
+ {
+ if (AyaNova.Api.ControllerHelpers.Authorized.IsAuthorizedToReadFullRecord(currentUserRoles, t.ObjectType))
+ {
+ }
+
+ }
}