Files
2026-03-22 14:00:52 +03:30

191 lines
5.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using xCommons.Extensions;
using xExceptions.Constants;
namespace xIdentityHelper.Extensions
{
public static class XUserRoleExtensions
{
/// <summary>
/// Converts an String to XUserRole ...
/// </summary>
/// <param name="role"></param>
/// <returns></returns>
public static XUserRole ToXUserRole(this string role)
{
//
var result = XUserRole.User;
//
// Validate ...
if (role.IsNullOrEmpty())
{
XException.InvalidArgs.Throw();
}
//
var roles = new List<string>
{
role
};
result = roles.GetTopRole();
//
return result;
}
/// <summary>
/// Retrieve User Top Role based on Role Lists ...
/// </summary>
/// <param name="roles"></param>
/// <returns></returns>
public static XUserRole GetTopRole(this IEnumerable<string> 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;
}
/// <summary>
/// Check User Roles has Specified Permissions or not ...
/// </summary>
/// <param name="roles"></param>
/// <param name="role"></param>
/// <returns></returns>
public static bool HasRolePermissions(this IEnumerable<string> 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<string> 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;
}
}
}