@Saharman

Как получить роль, начинающуюся с определенных символов?

Хочу проверить, принадлежит ли текущий пользователь роли, начинающейся с определенный букв (например, для admin с букв "ad"). Существует ли вообще такая возможность? Если да, то как это можно сделать?
P.S. то что можно получить список ролей пользователя и их проверить на данных критерий, я и так знаю
  • Вопрос задан
  • 29 просмотров
Решения вопроса 1
@kttotto
пофиг на чем писать
Если это Core, то использовать политики, что-то примерно
public void ConfigureServices(IServiceCollection services)
{
	services.AddAuthorization(x => 
	{
		x.AddPolicy("RoleStartWith", policy => { 
				policy.RequireRole(roles.Where(r => r.StartsWith("ad")));
			});
	});
}

[Authorize(Policy = "RoleStartWith")]
public IActionResult Index()
{
	return View();
}

Если это, например, MVC5, то можно использовать кастомный атрибут как то так:
public class CustomAutorizeAttribute : AuthorizeAttribute
{
	private string _prefix;
	private string[] _roles;

	public CustomAutorizeAttribute(string prefix)
	{
		_prefix = prefix;
		_roles = base.Roles.Split(',').Select(x => x.Trim()).ToArray();
	}

	protected override bool AuthorizeCore(HttpContextBase httpContext)
	{
		return _roles.Where(x => x.StartsWith(_prefix)).Any(x => httpContext.User.IsInRole(x));
	}
}

[CustomAutorize(prefix = "ad")]
public IActionResult Index()
{
	return View();
}

Писал все на коленке в блокноте, руками не проверял, но основная мысль, надеюсь, понятна.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы