191 lines
5.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |