Как я могу реализовать авторизацию на основе разрешений в ASP.NET? - PullRequest
10 голосов
/ 31 августа 2011

Я работаю с приложением ASP.NET (не использующим MVC) и мне нужна схема авторизации на основе прав доступа пользователя, где страницы и / или методы могут требовать определенного разрешения, а не роли есть). Есть ли способ расширить проверку подлинности с помощью форм (или создать что-то) для решения этой проблемы?

Если возможно, я бы хотел использовать атрибуты:

[RequirePermission("UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}

Возможно, даже для методов:

public class MyClass
{
    ...
    [RequirePermission("UserEdit")]
    public void Save()
    {
        ...
    }
}

Возможно ли это?

Я нашел эту страницу , в которой предлагалось использовать роли для разрешений:

[Authorize(Roles = "UserEdit")]
public partial class EditUser : System.Web.UI.Page
{
}

Я не очень люблю это решение, но это также будет возможным способом решения проблем, но что мне нужно сделать, чтобы оно заработало?

1 Ответ

10 голосов
/ 31 августа 2011

Модель авторизации Microsoft - отстой ... и она широко признана http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/).

Это сказал. Приятно иметь перекрестную совместимость, вписываясь в их IPrincipal.IsInRole API (и, таким образом, имея возможность использовать атрибут Authorize)

Итак ... что я делаю, чтобы пойти на компромисс, так это иметь модель полного разрешения в БД с пользователями, ролями и разрешениями ... но когда мой код устанавливает CurrentPrincipal, я делю роли и разрешения пользователя в роли Коллекция IPrincipal. Это далеко от идеала ... но ИМХО это достойный компромисс. Другие (Rockford Lhotka) также приняли этот подход: http://www.lhotka.net/weblog/PermissionbasedAuthorizationVsRolebasedAuthorization.aspx

...