RoleProvider не работает с пользовательским IIdentity и IPrincipal на сервере

Я использую пользовательскийIIdentity а такжеIPrincipal в моемASP.NET MVC приложение черезEF 4.3 как объяснилВот (и следуйте принятому решению ответа). Также у меня есть кастомRoleProvider. In local (using IIS Express), it works currectly, Но теперь, когда я загружаю приложение на реальный хост, кажется, что все пользователи находятся в"admin" роль! например Я создаю пользователя, который не в роли"admin", но он может получить доступ ко всем защищенным страницам (которые нужны"admin" роль). напримерRole.IsUserInRole всегда возвращаетсяtrue, Есть идеи, пожалуйста? Вы можете мне помочь? Есть ли какие-либо настройки, которые я должен сделать вIIS?

Ответы на вопрос(2)

это будет сложно. Я попытался создать свой собственный RoleManager, не используя удачу. После 2 дней, попробовав несколько вещей, я создал несколько методов расширения для RolePrincipal:

public static bool IsEmployee(this RolePrincipal principal)
{
    if (IsAuthenticated())
        return principal.IsInRole("Employee");

    return false;
}

public static bool IsAdmin(this RolePrincipal principal)
{
    if (IsAuthenticated())
        return principal.IsInRole("Admin");

    return false;
}

Создан новый класс WebViewPage:

public abstract class BaseViewPage : WebViewPage
{
    public virtual new RolePrincipal User
    {
        get
        {
            if (base.User == null)
                return null;

            return (RolePrincipal)base.User; //Hard casting: If it goes wrong, it better goes wrong here
        }
    }
}

public abstract class BaseViewPage<TModel> : WebViewPage<TModel>
{
    public virtual new RolePrincipal User
    {
        get
        {
            if (base.User == null)
                return null;

            return (RolePrincipal)base.User; //Hard casting: If it goes wrong, it better goes wrong here
        }
    }
}

Изменен файл web.config в папке views:

<pages pageBaseType="MyCompany.MyProject.BaseViewPage">

И все мои контроллеры происходят от моего BaseController:

public abstract class BaseController : Controller
{
    protected virtual new RolePrincipal User
    {
        get { return HttpContext.User as RolePrincipal; }
    }
}

Недостатком является то, что методы запрашивают мою базу данных каждый раз, когда их вызывают. Я использую MVC 4, кстати

Надеюсь, это кому-нибудь поможет

Решение Вопроса

и оно работает для меня. Не могу, может быть, вам стоит вернуться кAuthenticateRequest Если вы хотите попробовать этот способ, вы должны удалитьRoleManagerModule полностью из вашего проекта. Попробуйте это и дайте мне знать, если работает или нет:

// in your module:

public void Init(HttpApplication context) {
    _application = context;
    // rollback this line:
    _application.AuthenticateRequest += ApplicationAuthenticateRequest;
}

// and in web.config

<!-- in system.web section: -->
</system.web>
  <!-- other stufs -->
  <httpModules>
    <remove name="RoleManager"/>
  </httpModules>
</system.web>

<!-- and in system.webServer section: -->
<system.webServer>
  <!-- other stufs -->
  <modules runAllManagedModulesForAllRequests="true">
    <remove name="RoleManager"/>
  </modules>
<system.webServer>
 28 авг. 2012 г., 16:08
@taherchhabra Нет, если вы реализуете роль поставщика самостоятельно. Да, если вы хотите использовать поставщика ролей по умолчанию. Для получения дополнительной информации задайте отдельный вопрос.
 28 авг. 2012 г., 09:25
будут ли какие-либо побочные эффекты от удаления модуля RolManager

Ваш ответ на вопрос