2015-01-27 5 views
1

Я пытаюсь смешивать проверку подлинности 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 подчеркнут в красном.

enter image description here

Как я могу заставить систему распознавать мой новый провайдер?

Спасибо,

Марку

+0

Не правда ли 'Roles.IsUserInRole'? – Guvante

+0

Где используется метод «IsUserInRole», используемый в вашем представлении? С помощью RoleProvider я ожидаю, что вы просто будете использовать «if (User.IsInRole (« Admin »)». Если ваш RoleProvider настроен правильно (каким он представляется), 'User' должен быть экземпляром' RolePrincipal', который содержит роли, предоставленные вашим настраиваемым RoleProvider. – Joe

+0

Привет - он определен в файле MTRoleProvider.cs - в папке Models -> Security - спасибо – Mark

ответ

1

Используйте Extesion метод:

public static bool IsUserInRole(this HtmlHelper helper, string username, string roleName) 
    { 
     // your code 
    } 

затем на ваш взгляд:

@if(Html.IsUserInRole(userName, Role)) 
+0

Hi Mike - спасибо - где бы я добавил код для расширения метод? – Mark

+0

в вашем классе MTRoleProvider, убедитесь, что он тоже статичен. также добавляет @using wb.Models.Security.MTRoleProvider на ваш взгляд –

+0

Привет - если я это сделаю, тогда он sn't распознает контекст db, определенный в верхней части класса/кода MTRoleProvider - часть «db» подчеркнута красным цветом. – Mark

Смежные вопросы