GenericPrincipalExtensions.cs 1.99 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Security.Principal;
using System.Web;
using CWA.CpoOnline.Models;
using Microsoft.AspNet.Identity;

namespace CWA.CpoOnline.Extensions
{
/*	public static class GenericPrincipalExtensions
	{
		public static string GetClaim(this IPrincipal user, string claimType)
		{
			if (user.Identity.IsAuthenticated)
			{
				var claimsIdentity = user.Identity as ClaimsIdentity;
				if (claimsIdentity != null)
				{
					var result = claimsIdentity.Claims.FirstOrDefault(c => c.Type.Equals(claimType));
					return result?.Value;
				}
			}
			return string.Empty;
		}

		public static string FullName(this IPrincipal user)
		{
			return GetClaim(user, "FullName");
		}

		public static Guid UserId(this IPrincipal user)
		{
			return Guid.Parse(user.Identity.GetUserId());
		}

		public static bool IsInRole(this IPrincipal user, string role)
		{
			return user.IsInRole(role.ToString());
		}

		public static bool IsInAnyRoles(this IPrincipal user, params string[] roles)
		{
			return roles.Any(role => user.IsInRole(role.ToString()));
		}
	}*/

	public static class ApplicationUserExtensions
	{
		public static bool IsInRole(this ApplicationUser user, string role)
		{
			return user.HasClaimValue(ClaimTypes.Role, CpoRoles.Admin);
		}

		public static bool CanAccessSector(this ApplicationUser user, string sectorName)
		{
			return user.HasClaimValue(CpoClaimTypes.Sector, sectorName);
		}

		public static bool CanAccessSymbol(this ApplicationUser user, string symbolName)
		{
			return user.HasClaimValue(CpoClaimTypes.Symbol, symbolName);
		}


		public static bool HasClaimValue(this ApplicationUser user, string claimType, string claimValue)
		{
			var claim = user.Claims.FirstOrDefault(c =>
						c.ClaimType.Equals(claimType, StringComparison.InvariantCultureIgnoreCase) &&
						c.ClaimValue.Equals(claimValue, StringComparison.InvariantCultureIgnoreCase));
			if (null == claim) return false;
			return true;
		}

	}
}