Пользовательские роли не работают в Asp.Net

1

В настоящее время я пытаюсь заставить UserRoles работать в ASP.NET. Я столкнулся с некоторыми проблемами. По какой-то причине он, похоже, не забирает роли из БД.

Я изменяю имя таблицы для удовлетворения моего требования, используя следующий код в IdentityModels.cs

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUserRole>().ToTable("MyRroles");
    }

Сначала он не смог найти схему и после некоторых исследований я следил за этой статьей и эта конкретная ошибка исчезла. Однако после статьи она добавила следующие таблицы в моей БД

aspnet_Applications
aspnet_Roles
aspnet_SchemaVersions
aspnet_Users
aspnet_UsersInRoles

Который мне не нужен. Я делаю базовую инструкцию if чтобы проверить, не работают ли роли. И, похоже, он не поднимает роли.

if(Roles.RoleExists("RoleName"))
        {
            Button1.Visible = false;
    }

В моем файле web.config меня есть следующий код

<roleManager defaultProvider="MyConn" enabled="true">
        <providers>
            <add
              name="MyConn"
              type="System.Web.Security.SqlRoleProvider"
              connectionStringName="MyConn"
              applicationName="MyApp"/>
        </providers>
    </roleManager>

Может ли кто-нибудь сказать мне, где я ошибаюсь, пожалуйста. Спасибо за вашу помощь и поддержку.

  • 0
    Прокрутите вниз до конца статьи и нажмите на ссылку «Реализация ролевого провайдера», которая приведет вас сюда msdn.microsoft.com/en-us/library/8fw7xh74.ASPX - это то, что вам нужно, так как вы используете пользовательскую БД схема, а не по умолчанию.
  • 0
    @KevinMain Спасибо за предложение, за которым я следил за статьей, и теперь он дает мне эту ошибку The 'System.Web.Security.SqlRoleProvider' requires a database schema compatible with schema version '1'
Показать ещё 5 комментариев
Теги:
asp.net-roles

1 ответ

1
Лучший ответ

Если вы хотите сделать a basic if statement to check whether the roles are working of not тогда, вам нужно где-то хранить роли, правильно? И поскольку вы хотите использовать поставщик ролей по умолчанию, вам нужны эти SQL-таблицы. Поставщик по умолчанию в System.Web.Security.SqlRoleProvider использует их. Поскольку Roles.RoleExists("RoleName") будут искать эти таблицы, чтобы узнать, назначен ли текущий пользователь роли RoleName.

Если вы хотите изменить способ назначения роли роли, вам необходимо реализовать собственный поставщик ролей.

Вот пример:

public class MyRoleProvider : RoleProvider
{
    public override void AddUsersToRoles(string[] usernames, string[] roleNames)
    {
        // your logic here
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        // your logic here
    }

    public override string[] GetAllRoles()
    {
        // your logic here
    }

    public override bool RoleExists(string roleName)
    {
        // your logic here
    }

    // etc...
 }

Проверьте эту статью на наличие всех доступных методов: http://msdn.microsoft.com/en-us/library/8fw7xh74(v=vs.100).aspx.

Затем, чтобы настроить приложение для использования вашего провайдера, просто обновите файл web.config:

<roleManager defaultProvider="MyRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="3" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All">
    <providers>
        <clear />
        <add name="MyRoleProvider" type="MyNamespace.MyRoleProvider" connectionStringName="DefaultConnection" applicationName="MyAppName" writeExceptionsToEventLog="false" />
    </providers>
</roleManager>

Конечно, вам нужно обновить код с помощью собственного пространства имен, параметров и т.д....

После этого ваш код в Roles.RoleExists("RoleName") выполнит метод RoleExists из вашего поставщика роли.

  • 0
    Я понимаю, что System.Web.Security.SqlRoleProvider использует эти таблицы, которые у меня были в моей БД с самого начала. Однако, когда я запускаю Aspnet_regsql.exe он генерирует те же самые таблицы, но в нижнем регистре: / И если я не запускаю Aspnet_regsql.exe я получаю ошибку, couldn't find the schema
  • 0
    Я не уверен, что понимаю. Вам нужны эти таблицы в конце концов?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню