using System; using System.Collections.Generic; using System.Linq; using xCommons.Extensions; using xExceptions.Constants; namespace xIdentityHelper.Extensions { public static class XUserRoleExtensions { /// /// Converts an String to XUserRole ... /// /// /// public static XUserRole ToXUserRole(this string role) { // var result = XUserRole.User; // // Validate ... if (role.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // var roles = new List { role }; result = roles.GetTopRole(); // return result; } /// /// Retrieve User Top Role based on Role Lists ... /// /// /// public static XUserRole GetTopRole(this IEnumerable roles) { // // Validate ... if (roles.IsNull() || !roles.HasChild()) { XException.InvalidArgs.Throw(); } // // Normalize Roles ... roles = roles.Select(r => r.ToNormalString()); // var result = XUserRole.User; // // Admin ... if (roles.Contains(XUserRole.Admin.GetStringValue().ToNormalString())) { result = XUserRole.Admin; } // // ResponsibleManager ... else if (roles.Contains(XUserRole.ResponsibleManager.GetStringValue().ToNormalString())) { result = XUserRole.ResponsibleManager; } // // Journalist ... else if (roles.Contains(XUserRole.Journalist.GetStringValue().ToNormalString())) { result = XUserRole.Journalist; } // // ChiefClerk ... else if (roles.Contains(XUserRole.ChiefClerk.GetStringValue().ToNormalString())) { result = XUserRole.ChiefClerk; } // // ChiefClerkAssistant ... else if (roles.Contains(XUserRole.ChiefClerkAssistant.GetStringValue().ToNormalString())) { result = XUserRole.ChiefClerkAssistant; } // // Actuary ... else if (roles.Contains(XUserRole.Actuary.GetStringValue().ToNormalString())) { result = XUserRole.Actuary; } // // ActuaryAssistant ... else if (roles.Contains(XUserRole.ActuaryAssistant.GetStringValue().ToNormalString())) { result = XUserRole.ActuaryAssistant; } // // Reporter ... else if (roles.Contains(XUserRole.Reporter.GetStringValue().ToNormalString())) { result = XUserRole.Reporter; } // // ReporterAssistant ... else if (roles.Contains(XUserRole.ReporterAssistant.GetStringValue().ToNormalString())) { result = XUserRole.ReporterAssistant; } // // Agent ... else if (roles.Contains(XUserRole.Agent.GetStringValue().ToNormalString())) { result = XUserRole.Agent; } // // User ... else if (roles.Contains(XUserRole.User.GetStringValue().ToNormalString())) { result = XUserRole.User; } else { XException.InvalidData.Throw(); } // return result; } /// /// Check User Roles has Specified Permissions or not ... /// /// /// /// public static bool HasRolePermissions(this IEnumerable roles, XUserRole role) { // // Validate ... var result = !roles.IsNull() && roles.HasChild(); if (!result) { return result; } // try { // var topRole = roles.GetTopRole(); // result = (int)topRole >= (int)role; } catch { result = false; } // return result; } public static bool HasRolePermissions(this IEnumerable roles, string role) { // // Validate ... var result = !roles.IsNull() && roles.HasChild() && !role.IsNullOrEmpty(); if (!result) { return result; } // var roleEnum = role.ToXUserRole(); result = roles.HasRolePermissions(roleEnum); // return result; } } }