powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не включается SqlRoleProvider
25 сообщений из 37, страница 1 из 2
Не включается SqlRoleProvider
    #38724996
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Такая проблема. Пишу под 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
Не включается SqlRoleProvider
    #38725570
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не включается SqlRoleProvider
    #38725842
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Так как же обратится к System.Web.Security.Roles?? Я видел эти статьи там только [Autorize] используют, да он работает а вот System.Web.Security.Roles ругается на отсутсвие провайдера ролей. Просто мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38725850
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?
У пользователя админ отобрал роль "Менеджер" и назначил роль "Уборщик". Пользователь так и остался менеджером. Профит?
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38725852
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12hVostt,
Так как же обратится к System.Web.Security.Roles?? Я видел эти статьи там только [Autorize] используют, да он работает а вот System.Web.Security.Roles ругается на отсутсвие провайдера ролей. Просто мне нужно получать список ролей пользователя но без постоянного дерганья базы а из сессии, как это сделать?

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

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

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

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

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

в Identity исопльзуется свой провайдер.
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38725885
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
так как к нему обратится?
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38725902
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не включается SqlRoleProvider
    #38725906
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
palich12МСУ,
Мне не чтобы назначать, мне чтобы показывать данные.
Например есть список объектов, некотре доступны однойроли некоторые другой.
Чтобы пользователь видел в списке все доступные ему объекты нужно получить список его ролей. Но на каждом обнавлении страницы лишний раз дергать базу не есть хорошо. Можно конечно закешировать список ролей, но это уже какой-то велосипед. Ведь их неверняка можно вытащить из Identity
Ну а я про что. У пользователя забрали роль, следовательно он не должен видеть данные для этой роли. Но он будет видеть эти данные, т.к. роли юзера у тебя сидят в сессии. Забудь про сессию, это зло. Есть БД с ней и работай.
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38725910
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не включается SqlRoleProvider
    #38725913
Фотография palich12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не включается SqlRoleProvider
    #38725915
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, дошло, наконец
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38725919
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУО, дошло, наконец
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38726192
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот заставить провайдера брать роли не из ClaimsIdentity а из базы напрямую при обработке AuthorizeAttribute у меня так и не получилось. Думаю и не получится.
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38726193
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Не включается SqlRoleProvider
    #38726290
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КА вот заставить провайдера брать роли не из ClaimsIdentity а из базы напрямую при обработке AuthorizeAttribute у меня так и не получилось. Думаю и не получится.
http://codearticles.ru/articles/2485
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38726329
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей КА вот заставить провайдера брать роли не из ClaimsIdentity а из базы напрямую при обработке AuthorizeAttribute у меня так и не получилось. Думаю и не получится.
http://codearticles.ru/articles/2485 Получается, что сконфигурировать это на уровне AuthenticationOptions не получится. Нужно мутить своего провайдера. Какая жаль...
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38726349
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУпропущено...

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

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

Тем более в системах по-сложнее по-любому придётся пилить свою систему авторизации и получения разрешений (особенно на уровне так называемом row-level), хочешь или не хочешь.
...
Рейтинг: 0 / 0
Не включается SqlRoleProvider
    #38726404
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
25 сообщений из 37, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Не включается SqlRoleProvider
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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