Как добавить разрешение для представления или контроллера динамически?

Во всех моих проектах asp.net mvc до этого момента разрешения для контроллеров устанавливались с помощью пользовательского класса, основанного на [Authorize] приписывать. Например

Однако, что если бы мне нужна роль администратора, которая могла бы предоставить доступ к представлениям вместо того, чтобы прикасаться к контроллеру, чтобы добавлять / удалять роли, перекомпилировать и отправлять изменения в рабочую среду. Как бы я поступил так?

1 ответ

Решение

Как обсуждалось. Попробуйте ниже.

в контроллере, как я уверен, вы знаете.

[PermissionsFilter("CanAccessMyView")]
public ActionResult ReturnMyView () 
{
   //etc..
}

Затем в вашем пользовательском классе

 public class PermissionsFilter : AuthorizeAttribute
    {
        private readonly PermissionManager _permissionsManager;

        public PermissionsFilter(string permissionName)
        {
            _permissionName = permissionName;
            _permissionsManager = new PermissionServiceManager();
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (!_permissionServiceManager.CanAccessPermission(_permissionName))
            {
                var urlHelper = new UrlHelper(filterContext.RequestContext);
                var url = urlHelper.Action("Unauthorised", "Home");
                filterContext.Result = new RedirectResult(url);
            }
        }
    }

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

Надеюсь, это поможет.

Другие вопросы по тегам