ASP.NET MVC security: Как проверить, разрешен ли метод контроллера для выполнения в соответствии с perrmissions текущего пользователя


Учитывая, что ASP.NET объявление класса контроллера MVC:

public class ItemController : Controller
{
    public ActionResult Index()
    {
       // ...
    }

    public ActionResult Details()
    {
       // ...
    }

    [Authorize(Roles="Admin, Editor")]
    public ActionResult Edit()
    {
       // ...
    } 

    [Authorize(Roles="Admin")]
    public ActionResult Delete()
    {
      // ..
    }
}

Мне нужно отразить список методов в этом классе, которые могут быть вызваны с правами текущего пользователя.

Пожалуйста, поделитесь некоторыми идеями о том, что можно было бы сделать в этом случае.
1 4

1 ответ:

Ну а для нового вопроса придумайте что-нибудь вроде:

new ReflectedControllerDescriptor(typeof(ItemController)).GetCanonicalActions()

Можно использовать для возврата списка всех доступных действий. У меня его нет. ASP.NET MVC доступен мне на работе, поэтому я не могу проверить, действительно ли ActionDescriptor возвращается тем, что будет содержать какой-то параметр, который говорит, какие члены могут их выполнять.

Http://msdn.microsoft.com/en-us/library/system.web.mvc.actiondescriptor_members%28v=VS.90%29.aspx

То есть члены ActionDescriptor, вы могли бы найти что-то там. Я посмотрю сегодня вечером, смогу ли я это понять, это меня немного заинтриговало.


Для всех приложений не существует универсальной системы входа/аутентификации пользователя, поэтому создать "универсальное решение" действительно невозможно. Вы можете создать свои собственные классы входа пользователя и авторизации, которые затем вы добавляете свои собственные аннотации к методам, чтобы сделать, но его будет иметь те же ограничения, что и asp.net система mvc имеет, его только для вашего входа / авторизации системы (или кто расширяет эту систему).