Реализация CustomRoleProvider и использование роли для авторизации в MVC3 asp.net

Я изучал, как реализовать CustomRoleProvider из нескольких учебных пособий, и мне удалось реализовать 2 основных метода, как показано ниже

    public override string[] GetRolesForUser(string userName)
    {
        string connectionString =
          ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
        DataContext context = new DataContext(connectionString);
        Table<UserObj> usersTable = context.GetTable<UserObj>();
        UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);
        string roleId = userObj.UserRoleID;

        if (roleId != null)
            return roleId.Select(c => c.ToString()).ToArray();
        else
            return new string[] { }; 

    }

    public override bool IsUserInRole(string userName, string roleName)
    {
        string connectionString =
         ConfigurationManager.ConnectionStrings["myDb"].ConnectionString;
        DataContext context = new DataContext(connectionString);
        Table<UserObj> usersTable = context.GetTable<UserObj>();
        UserObj userObj = usersTable.SingleOrDefault(u => u.UserName == userName);

        if (userObj != null)
        {
            string roleId = userObj.UserRoleID;
            if (roleId.Equals(roleName))
                return true;
        }
       return false;
    }

Затем я добавил [Authorize(Roles = "admin")] в метод индекса контроллера, доступ к которому я хочу получить только у администратора. Когда я пытался получить доступ к странице, кажется, что он выполняет ограничение нормально, например, если я ввел URL:

       http://localhost:60353/module

..это перенаправил меня

        http://localhost:60353/Account/LogOn?ReturnUrl=%2fmodule

Однако роль, похоже, не была проверена.

Что я здесь не так сделал?

1 ответ

Я также сталкиваюсь с той же проблемой, но я могу вызвать метод CustomProvider:

IsUserInRoles ()

явно, но это кажется правильным, потому что доступность не изменилась.... он всегда перенаправляет только на экран входа в систему.......

Другие вопросы по тегам