Я пытаюсь смешивать проверку подлинности Windows с моим собственным поставщиком роли, но я не могу заставить его распознавать «IsUserInRole (« .... ») "...")»Asp.Net MVC 5 смешивание проверки подлинности Windows с поставщиком роли
Я добавил новый класс моих моделей -> папка безопасности, названная MTRoleProvider:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
namespace wb.Models.Security
{
public class MTRoleProvider : RoleProvider
{
private BoardContext db = new BoardContext();
public override string[] GetRolesForUser(string username)
{
var roleNames = db.UserRole.Where(x => x.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase)).Select(x => x.Role);
if (roleNames.Count() > 0)
return roleNames.ToArray();
else
return new string[] { };
}
public override bool IsUserInRole(string username, string roleName)
{
var user = db.UserRole.Where(x => x.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase) && x.Role.Equals(roleName,StringComparison.CurrentCultureIgnoreCase));
if (user != null)
return true;
else
return false;
}
}
}
в моей web.config - я добавил это system.web:
<roleManager cacheRolesInCookie="true" defaultProvider="MTRoleProvider" enabled="true">
<providers>
<clear />
<add name="MTRoleProvider" type="wb.Models.Security.MTRoleProvider" />
</providers>
</roleManager>
Я также добавил:
<authentication mode="Windows" />
Тогда в моем файле _layout.cshtml, я пытался использовать его как это:
@if(IsUserInRole(User.Identity.Name,"Admin"))
{
<text>Admin mode</text>
}
User.Identity.Name должен дать свое имя пользователя для Windows (что он делает), но IsUserInRole
подчеркнут в красном.
Как я могу заставить систему распознавать мой новый провайдер?
Спасибо,
Марку
Не правда ли 'Roles.IsUserInRole'? – Guvante
Где используется метод «IsUserInRole», используемый в вашем представлении? С помощью RoleProvider я ожидаю, что вы просто будете использовать «if (User.IsInRole (« Admin »)». Если ваш RoleProvider настроен правильно (каким он представляется), 'User' должен быть экземпляром' RolePrincipal', который содержит роли, предоставленные вашим настраиваемым RoleProvider. – Joe
Привет - он определен в файле MTRoleProvider.cs - в папке Models -> Security - спасибо – Mark