38 lines
1.1 KiB
C#
38 lines
1.1 KiB
C#
using Disco.Services.Users;
|
|
using Microsoft.AspNet.SignalR;
|
|
using System;
|
|
using System.Security.Principal;
|
|
|
|
namespace Disco.Services.Web.Signalling
|
|
{
|
|
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
|
|
public class DiscoHubAuthorizeAttribute : AuthorizeAttribute
|
|
{
|
|
string authorizedClaim;
|
|
|
|
public DiscoHubAuthorizeAttribute() { }
|
|
|
|
public DiscoHubAuthorizeAttribute(string AuthorisedClaim)
|
|
{
|
|
authorizedClaim = AuthorisedClaim;
|
|
}
|
|
|
|
protected override bool UserAuthorized(IPrincipal user)
|
|
{
|
|
if (user == null || !user.Identity.IsAuthenticated)
|
|
return false;
|
|
|
|
var username = user.Identity.Name;
|
|
var userToken = UserService.GetAuthorization(username);
|
|
|
|
if (userToken == null)
|
|
return false; // No User
|
|
|
|
if (authorizedClaim == null)
|
|
return userToken.RoleTokens.Count > 0; // Just Authenticate - no Authorization (but require at least 1 role)
|
|
else
|
|
return userToken.Has(authorizedClaim);
|
|
}
|
|
}
|
|
}
|