Поиск инфраструктуры авторизации для использования в проекте ASP.NET MVC - PullRequest
4 голосов
/ 28 января 2011

У меня есть проект asp.net mvc, а постоянный обрабатывается репозиториями. Форма аутентификации используется. Теперь мне нужно реализовать авторизацию. Например, мне нужно убедиться, что пользователь менеджера может только открывать свои задачи и назначать работников для этих задач. Работник будет видеть только те задачи, которые ему поручены. Супер-модератор может редактировать все. Есть ли готовый к использованию каркас, который позволяет мне определять разрешения?

Я нахожусь в процессе оценки безопасности Ayende Rhino. Где я могу получить больше примеров кодов? Что вы думаете о Rhino Security?
Мой проект использует Linq to SQL и не использовал NHibernate. Может ли Rhino Security работать без NHibernate?

Ответы [ 3 ]

5 голосов
/ 28 января 2011

Боюсь, Rhino Security зависит от работы Nhibernate.
Я оцениваю Rhino Security в течение нескольких месяцев, и в конце концов я решил использовать его, потому что это действительно очень хороший продукт.
Хорошую полезную информацию вы можете найти в блоге Ayende или здесь .Я немного потрудился, чтобы интегрировать его в StructureMap (вместо Castle Windsor).Вы можете найти некоторую информацию здесь .
Чтобы сделать то, что вы пытаетесь достичь, вы должны определить класс, который реализует интерфейс IEntityInformationExtractor.

Прежде всего вы должны добавитьследующие ссылки (я перекомпилировал Rhino Security с NH 3.0):

  • Microsoft.Practices.ServiceLocation
  • NHibernate
  • NHibernate.ByteCode.Castle
  • StructureMap
  • Rhino.Security
  • StructureMapAdapter

Затем вы определяете загрузчик:

public static class Bootstrapper
{
    public static void Initialize()
    {
        ObjectFactory.Initialize(cfg =>
        {
            cfg.UseDefaultStructureMapConfigFile = false;
            cfg.IgnoreStructureMapConfig = true;
            cfg.AddRegistry<StructureMapRegistry>();
        });
        ServiceLocator.SetLocatorProvider(() => new StructureMapServiceLocator(ObjectFactory.Container));
    }
}

Затем вы определяете класс реестра StructureMap:

public class StructureMapRegistry : Registry
{
    public StructureMapRegistry()
    {
        string ConnDb = "Data Source=(local); Initial Catalog=RhinoSecurity_Test; Trusted_Connection=true;";

        For<ISessionFactory>()
            .Singleton()
            .TheDefault.Is.ConstructedBy(() => new NHSessionFactory(ConnDb, false).SessionFactory);
        For<ISession>()
            .Singleton()
            .TheDefault.Is.ConstructedBy(x => x.GetInstance<ISessionFactory>().OpenSession());
        For<IAuthorizationRepository>()
             .Use<AuthorizationRepository>();
        For<IPermissionsService>()
            .Use<PermissionsService>();
        For<IAuthorizationService>()
            .Use<AuthorizationService>();
        For<IPermissionsBuilderService>()
            .Use<PermissionsBuilderService>();
        For<IEntityInformationExtractor<Model.Task>>()
            .Use(p =>
                {
                return (new TaskInfromationExtractor(p.GetInstance<ISession>()));
                });
    }
}

NHSessionFactory в основном создаете фабрику сессий NH.

Я создал класс ( TaskInfromationExtractor ), который реализует IEntityInformationExtractor.Это позволит вам определить разрешения для объекта задачи.Теперь ваше приложение готово.Вам просто нужно "загрузить" карту структуры:

  • Bootstrapper.Initialize ();

Это можно сделать при запуске приложения.Теперь вы можете использовать репозиторий и службы безопасности Rhino для создания пользователей, групп, отношений и т. Д., Как я вам предлагаю.Вы можете найти образец, который я подготовил здесь

1 голос
/ 02 июня 2011

Проверьте это тоже.Он прост в использовании.

http://code.google.com/p/saf-framework/

1 голос
/ 28 января 2011

Я думаю, атрибуты asp.net mvc подойдут для такой задачи.

Сначала вам нужно создать список ролей и как-то связать его с пользователем.Чем вам нужно хранить роли пользователя в сеансе после входа в систему.Чем пометить контроллеры или действия с этим атрибутом.В атрибуте вы должны передать роли, которые должны выполнить какое-то действие.В реализации атрибута вам нужно просто проверить, есть ли у пользователя какая-то роль, тогда нечего делать, иначе перенаправить на несанкционированную страницу.Или сгенерируйте какое-то пользовательское исключение и перенаправьте в global.asax.

Мб, проверьте эту статью для примера кода.

...