Skip to content

Instantly share code, notes, and snippets.

@cleytonferrari
Created September 12, 2013 16:43
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cleytonferrari/6540563 to your computer and use it in GitHub Desktop.
Save cleytonferrari/6540563 to your computer and use it in GitHub Desktop.
using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Principal;
using System.Text;
using System.Threading;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using W7Gestao.Dominio.Configuracao;
namespace W7Gestao.UI.Web.Helper
{
public class Seguranca : ActionFilterAttribute
{
public string Roles { get; set; }
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
else
{
var token = actionContext.Request.Headers.Authorization.Parameter;
var tokenDecodificado = Encoding.UTF8.GetString(Convert.FromBase64String(token));
var login = tokenDecodificado.Substring(0, tokenDecodificado.IndexOf(":", StringComparison.Ordinal));
var senha = tokenDecodificado.Substring(tokenDecodificado.IndexOf(":", StringComparison.Ordinal) + 1);
var user = ValidarUsuario(login, senha);
if (user != null)
{
var minhaIdentidade = new GenericIdentity(user.Email);
var principal = new GenericPrincipal(minhaIdentidade, user.Permissoes);
Thread.CurrentPrincipal = principal;
base.OnActionExecuting(actionContext);
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
}
}
private Usuario ValidarUsuario(string login, string senha)
{
var permissoes = new string[] { "Administrador" };
if (login == "cleytonferrari" && senha == "123456")
{
if (string.IsNullOrEmpty(Roles) || permissoes.Contains(Roles))
return new Usuario() { Email = "cleytonferrari@gmail.com", Permissoes = permissoes };
}
return null;
}
}
}
using System.Collections.Generic;
using System.Web.Http;
using W7Gestao.UI.Web.Helper;
namespace W7Gestao.UI.Web.Controllers.API.Configuracao
{
public class UsuarioController : ApiController
{
[Seguranca(Roles = "Administrador")]
public IEnumerable<string> Get()
{
if(User.IsInRole("Gerente"))
return new[] { "value1", "value2" };
return new[] {User.Identity.Name};
}
}
}
@ElemarJR
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment