У меня есть веб-сайт, который использует формы auth и ActiveDirectoryMembershipProvider. У меня есть действие в контроллере:
[Authorize(Roles = "jira-developers")]
[HttpGet]
public ActionResult MonitorForm()
{
var list = Dal.GetActualData();
return View(list);
}
Я абсолютно уверен, что мой пользователь находится в группе с Name = "jira-developers", но auth не удается. Если я удалю параметр Роли, auth будет работать нормально.
Что я делаю не так? Я буду благодарен за любую помощь!
Поскольку никто не дал мне ответа, я сам отвечу на этот вопрос. ActiveDirectoryMembershipProvider может обрабатывать только auth и включить управление ролями, мне нужно было указать roleManager. Я реализовал свой собственный RoleProvider (потому что мне нужна определенная функциональность), и теперь мой Web.Config выглядит так:
<system.web>
<authentication mode="Forms">
<forms name=".ADAuthCookie" loginUrl="~/Account/Login" timeout="45" slidingExpiration="false" protection="All" />
</authentication>
<membership defaultProvider="ADMembershipProvider">
<providers>
<clear />
<add name="ADMembershipProvider"
type="System.Web.Security.ActiveDirectoryMembershipProvider"
connectionStringName="ADConnectionString"
attributeMapUsername="sAMAccountName" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="AdRoleProvider">
<providers>
<clear/>
<add name="AdRoleProvider" type="InternalAutomation.Providers.AdRoleProvider"/>
</providers>
</roleManager>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
У вас есть роль, определенная в таблице ролей? (В зависимости от версии, которую вы используете, таблица может быть названа немного отличной от моего снимка экрана ниже)
У вас должна быть запись с именем "RoleName" из "jira-developers". Пользователь, набравший действие, также должен иметь запись в таблице "... UsersInRoles".