Как получить доступ к параметрам appsetting.json в классе AuthorizeAttribute в .Net Core - PullRequest
0 голосов
/ 24 октября 2018

В моем приложении ASP.NET Core MVC у меня есть класс, который наследуется от AuthorizeAttribute и реализует IAuthorizationFilter.

namespace MyProject.Attributes
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
    public class AllowGroupsAttribute : AuthorizeAttribute, IAuthorizationFilter
    {
        private readonly List<PermissionGroups> groupList = null;
        public AllowGroupsAttribute(params PermissionGroups[] groups)
        {
            groupList = groups.ToList();
        }

        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var executingUser = context.HttpContext.User;

            //If the user is not authenticated then prevent execution
            if (!executingUser.Identity.IsAuthenticated)
            {
                context.Result = new StatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
            }
        }
    }
}

Это позволяет мне украшать метод контроллера чем-то вроде [AllowGroups(PermissionGroups.Admin, PermissionGroups.Level1]

Что я планирую сделать, это получить имена групп из appsettings.json на основе перечисленных значений перечисления и проверить, является ли пользователь членом этих групп.

Мой вопрос заключается в том, как правильнополучить доступ к настройкам приложения из моего класса атрибутов?

1 Ответ

0 голосов
/ 24 октября 2018

Настройка параметров при запуске,

Либо с помощью параметров

services.Configure<MySettings>(Configuration.GetSection("groups"));

, либо конкретной модели объекта

MySettings settings = Configuration.GetSection("groups").Get<MySettings>();
services.AddSingleton(settings);

, а затем разрешите их с помощью HttpContext.RequestServices вФильтр

var services = context.HttpContext.RequestServices;

var settings = services.GetService<MySettings>();
//-- OR --
//var settings = services.GetService<IOptions<MySettings>>().Value;

//...

, в то время как подход более сервисный локатор, он должен разрешить доступ к желаемой конфигурации.

...