ln.http/ln.http/HttpPrincipal.cs

49 lines
1.8 KiB
C#

using System.Collections.Generic;
using System.Text;
using ln.http.router;
namespace ln.http
{
public class HttpPrincipal
{
public string UniqueId { get; set; }
public string Username { get; set; }
public HttpPrincipal AuthenticatedPrincipal { get; set; }
private Dictionary<string, HttpAccessRights> permissions = new Dictionary<string, HttpAccessRights>();
public IEnumerable<KeyValuePair<string, HttpAccessRights>> Permissions => permissions;
public void AddPermission(string roleName, HttpAccessRights accessRights)
{
if (permissions.TryGetValue(roleName, out HttpAccessRights roleAccessFlags))
{
roleAccessFlags |= accessRights;
permissions[roleName] = roleAccessFlags;
}
else
{
permissions.Add(roleName, accessRights);
}
}
public void RemovePermission(string roleName, HttpAccessRights accessRights)
{
if (permissions.TryGetValue(roleName, out HttpAccessRights roleAccessFlags))
{
roleAccessFlags &= ~accessRights;
permissions[roleName] = roleAccessFlags;
}
}
public bool HasPermission(string roleName, HttpAccessRights accessRights) =>
permissions.TryGetValue(roleName, out HttpAccessRights roleAccessFlags) &&
((roleAccessFlags & accessRights) == accessRights);
public override string ToString()
{
if (AuthenticatedPrincipal is null)
return string.Format("{0}[{1}]", Username, UniqueId);
else
return string.Format("{2}=>{0}[{1}]", Username, UniqueId, AuthenticatedPrincipal.ToString());
}
}
}