Безопасность сайта / Управление доступом для приложения asp.net mvc - PullRequest
0 голосов
/ 25 марта 2010

Я пытаюсь найти подходящий шаблон для проверки доступа пользователя.

По сути, в приложении веб-форм у меня была структура, в которой для определения доступа использовались роли пользователей, т. Е. Пользователям были назначены роли, а «страницам» был предоставлен доступ к странице. У меня была таблица в базе данных со всеми перечисленными в ней страницами. Страницы могут иметь дочерние страницы, которые получили доступ, унаследованный от родителя.

При определении доступа я назначил ролям доступ к страницам. Пользователи в роли получили доступ к страницам. Это довольно просто управлять. Я реализовал это в базовом классе, который наследовал каждая страница. На странице загрузки / инициализации я проверял бы URL страницы и проверял доступ и действовал соответствующим образом.

Однако сейчас я работаю над приложением MVC и мне нужно реализовать нечто подобное, однако я не могу найти хороший способ заставить работать мое предыдущее решение. Чисто, потому что у меня нет статических страниц в качестве URL-путей. Также я не уверен, как лучше подойти к этому, поскольку у меня теперь есть контроллеры, а не страницы aspx.

Я посмотрел на MVCSitemapprovider, но это не работает с базой данных, ему нужен файл карты сайта. Мне нужен контроль над изменением прав доступа пользователя на лету.

Любые мысли / предложения / указатели будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 25 марта 2010

Когда вы создаете приложение MVC, а не пустой веб-сайт, включается базовый поставщик членства ASP.NET. Это сделает все, что вы ищете, практически без кодирования.

Вот MSDN: http://msdn.microsoft.com/en-us/library/yh26yfzy.aspx

Вот проект CodePlex, который расширяет функциональность по сравнению с тем, что было встроено: http://mvcmembership.codeplex.com/

0 голосов
/ 25 марта 2010

Ваша техника легко достигается созданием собственного ActionFilter: http://msdn.microsoft.com/en-us/library/dd410056.aspx

Затем вы можете применить этот атрибут к контроллерам или методам действий и очень легко прокрутить свою собственную страницу безопасности.

public class MinmalSecurity : ActionFilterAttribute
{
    private string _roles;
    public MinmalSecurity(string roles)
    {
        _roles = roles;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //go to database,find permissions, redirect or proceed as nescessary

        base.OnActionExecuting(filterContext);
    }
}
...