using EnumsNET; using System.Collections.Generic; using Sockeye.Biz; namespace Sockeye.Api.ControllerHelpers { //AUTHORIZATION ROLES: NOTE - this is only 'stage1' of generally checking rights, individual objects can also have business rules that affect access exactly as these roles do //Most objects won't need more than this but some specialized ones will have further checks depending on biz rules internal static class Authorized { /// /// User has any role restricted or full /// /// /// /// internal static bool HasAnyRole(IDictionary HttpContextItems, AuthorizationRoles CheckRoles) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); return HasAnyRole(currentUserRoles, CheckRoles); } /// /// User has any role restricted or full /// /// /// /// internal static bool HasAnyRole(AuthorizationRoles currentUserRoles, AuthorizationRoles CheckRoles) { if (currentUserRoles.HasAnyFlags(CheckRoles)) return true; return false; } /// /// any access at all? /// /// /// /// internal static bool HasAnyRole(IDictionary HttpContextItems, SockType aType) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); return HasAnyRole(currentUserRoles, aType); } /// /// User has any access at all to this object? /// /// /// /// internal static bool HasAnyRole(AuthorizationRoles currentUserRoles, SockType aType) { var RoleSet = BizRoles.GetRoleSet(aType); if (RoleSet == null) return false; var AllowedRoles = RoleSet.ReadFullRecord | RoleSet.Change | RoleSet.Select; return currentUserRoles.HasAnyFlags(AllowedRoles); } /// /// READ FULL RECORD (not just name and id) /// /// /// /// internal static bool HasSelectRole(IDictionary HttpContextItems, SockType aType) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); return HasSelectRole(currentUserRoles, aType); } /// /// SELECT BY NAME /// /// /// /// internal static bool HasSelectRole(AuthorizationRoles currentUserRoles, SockType aType) { var RoleSet = BizRoles.GetRoleSet(aType); if (RoleSet == null) return false; //NOTE: this assumes that if you can change you can read if (currentUserRoles.HasAnyFlags(RoleSet.Change)) return true; if (currentUserRoles.HasAnyFlags(RoleSet.ReadFullRecord)) return true; if (currentUserRoles.HasAnyFlags(RoleSet.Select)) return true; return false; } /// /// READ FULL RECORD (not just name and id) /// /// /// /// internal static bool HasReadFullRole(IDictionary HttpContextItems, SockType aType) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); return HasReadFullRole(currentUserRoles, aType); } /// /// READ FULL RECORD (not just name and id) /// /// /// /// internal static bool HasReadFullRole(AuthorizationRoles currentUserRoles, SockType aType) { //NOTE: this assumes that if you can change you can read var RoleSet = BizRoles.GetRoleSet(aType); if (RoleSet == null) return false; var AllowedRoles = RoleSet.ReadFullRecord | RoleSet.Change; return currentUserRoles.HasAnyFlags(AllowedRoles); } /// /// CREATE /// /// /// /// internal static bool HasCreateRole(IDictionary HttpContextItems, SockType aType) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); return HasCreateRole(currentUserRoles, aType); } /// /// CREATE /// /// /// /// internal static bool HasCreateRole(AuthorizationRoles currentUserRoles, SockType aType) { var RoleSet = BizRoles.GetRoleSet(aType); if (RoleSet == null) return false; if (currentUserRoles.HasAnyFlags(RoleSet.Change)) return true; return false; } /// /// MODIFY /// /// /// /// internal static bool HasModifyRole(IDictionary HttpContextItems, SockType aType) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); return HasModifyRole(currentUserRoles, aType); } /// /// MODIFY /// /// /// /// internal static bool HasModifyRole(AuthorizationRoles currentUserRoles, SockType aType) { var RoleSet = BizRoles.GetRoleSet(aType); if (RoleSet == null) return false; if (currentUserRoles.HasAnyFlags(RoleSet.Change)) return true; return false; } /// /// 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 HasDeleteRole(IDictionary HttpContextItems, SockType aType) { AuthorizationRoles currentUserRoles = UserRolesFromContext.Roles(HttpContextItems); long currentUserId = UserIdFromContext.Id(HttpContextItems); return HasDeleteRole(currentUserRoles, aType); } /// /// 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 HasDeleteRole(AuthorizationRoles currentUserRoles, SockType aType) { var RoleSet = BizRoles.GetRoleSet(aType); if (RoleSet == null) return false; if (currentUserRoles.HasAnyFlags(RoleSet.Change)) return true; return false; } } }//eons