Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не включается SqlRoleProvider / 25 сообщений из 37, страница 1 из 2
20.08.2014, 20:44
    #38724996
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
Привет всем!
Такая проблема. Пишу под MVC. Хочу использовать функционал ролей в своем веб приложении. При обращении к System.Web.Security.Roles получаю сообщение
An exception of type 'System.Configuration.Provider.ProviderException' occurred in System.Web.dll but was not handled in user code

Additional information: Функция диспетчера ролей не включена.
Что вполне логично. Пытаюсь включить SqlRoleProvider по этому руководству http://msdn.microsoft.com/en-us/library/aa702542(v=vs.110).aspx
соответсвенно добавил в web.config это
Код: xml
1.
2.
3.
4.
5.
<roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="SqlRoleProvider">
      <providers>
        <add name="SqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/"/>
      </providers>
    </roleManager>


и это
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="SqlRoleProvider"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>


и тут на этапе проверки роли ГДЕ РАНЬШЕ ПРОВЕРКА РОЛИ РАБОТАЛА И БЕЗ МЕНЕДЖЕРА
Код: c#
1.
if (User.IsInRole("Administrator"))


Получаю вот такую загадочную ошибку
An exception of type 'System.Data.SqlClient.SqlException' occurred in System.Web.dll but was not handled in user code

Additional information: Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.
Что это за процедура не понятно. Если гуглить, то вроде это из старой версии .NET 2.0 что-то. Пытался следовать инструкциям по использованию http://stackoverflow.com/questions/2165908/could-not-find-stored-procedure-dbo-aspnet-checkschemaversion
Но aspnet_regsql.exe падает с ошибкой Исключение:
Во время выполнения файла SQL 'InstallCommon.sql' произошла ошибка. Номер ошибки SQL - 40508, а сообщение SqlException: USE statement is not supported to switch between databases. Use a new connection to connect to a different Database. Вот такие пироги не могу заюзать RoleProvider
...
Рейтинг: 0 / 0
21.08.2014, 13:54
    #38725570
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12
Код: xml
1.
2.
3.
4.
5.
<roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="SqlRoleProvider">
      <providers>
        <add name="SqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/"/>
      </providers>
    </roleManager>



выпили из проекта и забудь про это навсегда.

естественно будет ошибка, если поключаешь Identity, у него свой провайдер ролей, который не надо конфигурировать в web.config.

http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity
http://habrahabr.ru/post/227351/
http://codearticles.ru/articles/2451

информации по теме, в том числе на русском, больше чем дофига
...
Рейтинг: 0 / 0
21.08.2014, 16:51
    #38725842
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVostt,
Так как же обратится к System.Web.Security.Roles?? Я видел эти статьи там только [Autorize] используют, да он работает а вот System.Web.Security.Roles ругается на отсутсвие провайдера ролей. Просто мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?
...
Рейтинг: 0 / 0
21.08.2014, 16:56
    #38725850
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?
У пользователя админ отобрал роль "Менеджер" и назначил роль "Уборщик". Пользователь так и остался менеджером. Профит?
...
Рейтинг: 0 / 0
21.08.2014, 17:00
    #38725852
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12hVostt,
Так как же обратится к System.Web.Security.Roles?? Я видел эти статьи там только [Autorize] используют, да он работает а вот System.Web.Security.Roles ругается на отсутсвие провайдера ролей. Просто мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?

можно, почитайте информацию по ссылкам. там всё есть.
...
Рейтинг: 0 / 0
21.08.2014, 17:03
    #38725862
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
МСУ,
Мне не чтобы назначать, мне чтобы показывать данные.
Например есть список объектов, некотре доступны однойроли некоторые другой.
Чтобы пользователь видел в списке все доступные ему объекты нужно получить список его ролей. Но на каждом обнавлении страницы лишний раз дергать базу не есть хорошо. Можно конечно закешировать список ролей, но это уже какой-то велосипед. Ведь их неверняка можно вытащить из Identity
...
Рейтинг: 0 / 0
21.08.2014, 17:06
    #38725865
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12,

какая у вас Visual Studio? версия?
...
Рейтинг: 0 / 0
21.08.2014, 17:10
    #38725869
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVostt,
VS Ultimate 2013 Update 3
...
Рейтинг: 0 / 0
21.08.2014, 17:12
    #38725872
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12hVostt,
VS Ultimate 2013 Update 3

ну так и создайте тогда MVC 5 новый проект, там всё будет, авторизация, и роли, и кеширование ролей в куках, и [Authorize(Roles="role1,role2")] -- всё это уже там есть.
...
Рейтинг: 0 / 0
21.08.2014, 17:13
    #38725874
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVosttpalich12hVostt,
Так как же обратится к System.Web.Security.Roles?? Я видел эти статьи там только [Autorize] используют, да он работает а вот System.Web.Security.Roles ругается на отсутсвие провайдера ролей. Просто мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?

можно, почитайте информацию по ссылкам. там всё есть.

Да я не спорю что можно, но везде это через System.Web.Security.Roles делают. Но у меня он говорит что не включен.
...
Рейтинг: 0 / 0
21.08.2014, 17:15
    #38725880
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVostt,
Да я так и сделал, и там все есть. Я же написал что Autorize нормально работает. System.Web.HttpContext.Current.User.IsInRole тоже нормально работает. Но вот список ролей пользователя из кук получить не могу
...
Рейтинг: 0 / 0
21.08.2014, 17:15
    #38725881
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12Но у меня он говорит что не включен.

в Identity исопльзуется свой провайдер.
...
Рейтинг: 0 / 0
21.08.2014, 17:17
    #38725885
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVostt,
так как к нему обратится?
...
Рейтинг: 0 / 0
21.08.2014, 17:24
    #38725902
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12hVostt,
так как к нему обратится?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public ActionResult Roles()
        {
            var context = HttpContext.GetOwinContext();
            var roleManager =
                new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));

            var roles = roleManager.Roles.ToList();

            return View(roles);
        }
...
Рейтинг: 0 / 0
21.08.2014, 17:27
    #38725906
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12МСУ,
Мне не чтобы назначать, мне чтобы показывать данные.
Например есть список объектов, некотре доступны однойроли некоторые другой.
Чтобы пользователь видел в списке все доступные ему объекты нужно получить список его ролей. Но на каждом обнавлении страницы лишний раз дергать базу не есть хорошо. Можно конечно закешировать список ролей, но это уже какой-то велосипед. Ведь их неверняка можно вытащить из Identity
Ну а я про что. У пользователя забрали роль, следовательно он не должен видеть данные для этой роли. Но он будет видеть эти данные, т.к. роли юзера у тебя сидят в сессии. Забудь про сессию, это зло. Есть БД с ней и работай.
...
Рейтинг: 0 / 0
21.08.2014, 17:30
    #38725910
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
palich12Но вот список ролей пользователя из кук получить не могу

все роли пользователя:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public ActionResult UserRoles()
        {
            var userManager =
                HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var currentUserId = User.Identity.GetUserId();
            var roles = userManager.GetRoles(currentUserId);
            return View(roles);
        }
...
Рейтинг: 0 / 0
21.08.2014, 17:33
    #38725913
palich12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVosttpalich12Но вот список ролей пользователя из кук получить не могу

все роли пользователя:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public ActionResult UserRoles()
        {
            var userManager =
                HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
            var currentUserId = User.Identity.GetUserId();
            var roles = userManager.GetRoles(currentUserId);
            return View(roles);
        }


Отлично, то что нужно. СПАСИБО!!!
...
Рейтинг: 0 / 0
21.08.2014, 17:33
    #38725915
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
О, дошло, наконец
...
Рейтинг: 0 / 0
21.08.2014, 17:34
    #38725919
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
МСУО, дошло, наконец
...
Рейтинг: 0 / 0
22.08.2014, 06:13
    #38726192
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
А вот заставить провайдера брать роли не из ClaimsIdentity а из базы напрямую при обработке AuthorizeAttribute у меня так и не получилось. Думаю и не получится.
...
Рейтинг: 0 / 0
22.08.2014, 06:25
    #38726193
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVosttpalich12hVostt,
так как к нему обратится?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public ActionResult Roles()
        {
            var context = HttpContext.GetOwinContext();
            var roleManager =
                new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>()));

            var roles = roleManager.Roles.ToList();

            return View(roles);
        }


palich12Но вот список ролей пользователя из кук получить не могу
В сложившейся ситуации, с учетом возможного кэширования, так правильнее:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public ActionResult Roles()
        {
            var ident = (ClaimsIdentity)User.Identity;
            var roles = ident.FindAll("http://schemas.microsoft.com/ws/2008/06/identity/claims/role")
                .Select(v => v.Value);

            return View(roles);
        }
...
Рейтинг: 0 / 0
22.08.2014, 09:50
    #38726290
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
Алексей КА вот заставить провайдера брать роли не из ClaimsIdentity а из базы напрямую при обработке AuthorizeAttribute у меня так и не получилось. Думаю и не получится.
http://codearticles.ru/articles/2485
...
Рейтинг: 0 / 0
22.08.2014, 10:23
    #38726329
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
МСУАлексей КА вот заставить провайдера брать роли не из ClaimsIdentity а из базы напрямую при обработке AuthorizeAttribute у меня так и не получилось. Думаю и не получится.
http://codearticles.ru/articles/2485 Получается, что сконфигурировать это на уровне AuthenticationOptions не получится. Нужно мутить своего провайдера. Какая жаль...
...
Рейтинг: 0 / 0
22.08.2014, 10:41
    #38726349
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
Алексей КМСУпропущено...

http://codearticles.ru/articles/2485 Получается, что сконфигурировать это на уровне AuthenticationOptions не получится. Нужно мутить своего провайдера. Какая жаль...

Какая жалость? Меняй роли правильно, на уровне приложения, сбрасывай SecurityStamp, какая разница откуда берутся роли? МСУ предлагает другой подход, при любом запросе выковыривать роли из БД, тоже правильно, но вовсе не обязательно так делать.

Тем более в системах по-сложнее по-любому придётся пилить свою систему авторизации и получения разрешений (особенно на уровне так называемом row-level), хочешь или не хочешь.
...
Рейтинг: 0 / 0
22.08.2014, 11:24
    #38726404
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не включается SqlRoleProvider
hVosttМеняй роли правильно, на уровне приложения, сбрасывай SecurityStamp...Накой мне SecurityStamp? Обсуждали ведь это как-то уже... Я проверяю логин при каждом запросе, производительность позволяет. Но в этом случае роли зря гоняются туда-сюда в куках. Это жаль...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
    public class AppAuthenticationOptions : CookieAuthenticationOptions
    {
        public AppAuthenticationOptions()
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie;
            Provider = new CookieAuthenticationProvider { OnValidateIdentity = ValidateIdentity };
        }

        async Task ValidateIdentity(CookieValidateIdentityContext ctx)
        {
            var userManager = DependencyResolver.Current.GetService<AppUserManager>();
            var userID = ctx.Identity.GetUserId();

            if (string.IsNullOrEmpty(userID) == false)
            {
                var user = await userManager.FindByIdAsync(userID);

                if (user != null)
                {
                    var identity = await userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
                    ctx.ReplaceIdentity(identity);
                    return;
                }
            }

            ctx.RejectIdentity();
        }        
    }
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не включается SqlRoleProvider / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]