Нечетное РольПровайдер Поведение - PullRequest
1 голос
/ 15 января 2010

ролевый провайдер настроен следующим образом с использованием DataContext. На мой взгляд, у меня есть следующий пользовательский элемент управления ...

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
    if (Request.IsAuthenticated) {
%>
        Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
        <%= Html.ActionLink("Logout", "Logout", "Membership") %> | (
        <%
            var roles = System.Web.Security.Roles.GetRolesForUser(Page.User.Identity.Name);
            foreach (string role in roles)
                Html.Encode(role);
         %>
         )

Теперь, если я запустил это на своем локальном компьютере, он работает нормально. Имейте в виду, подключен к той же базе данных, что и мой удаленный ящик. Он регистрируется и показывает роли, в которых участвует участник.

если я запускаю на удаленном компьютере, с той же базой данных, он войдет в систему и покажет имя участника - НО ... он не отображает роли. Есть идеи, почему это может происходить? Мой поставщик ролей вычерчен ниже.

using System;
using System.Linq;

using System.Collections;
using System.Collections.Generic;

namespace Providers
{
    public partial class RoleProvider : System.Web.Security.RoleProvider
    {
        private readonly Models.Contexts.DatabaseDataContext dataContext;

        protected Models.Contexts.DatabaseDataContext DataContext
        {
            get { return dataContext; }
        }

        public RoleProvider()
            : base()
        {
            if (dataContext == null)
                dataContext = new DataContextProvider().GetDataContext<Models.Contexts.DatabaseDataContext>("contextProvider");
        }

        public RoleProvider(IDataContextProvider dataContextProvider)
            : this()
        {
            dataContext = dataContextProvider.GetDataContext<Models.Contexts.DatabaseDataContext>("contextProvider");
        }

        public override string[] GetRolesForUser(string email)
        {
            DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues);
            var member = (
                from m in DataContext.Users
                where m.Email == email
                select m).Single();

            List<string> roleList = new List<string>();
            foreach (Models.Group group in member.Groups)
                roleList.Add(group.Role.RoleName);

            return roleList.ToArray<string>();
        }
}

1 Ответ

2 голосов
/ 15 января 2010

Я бы честно начал с рассмотрения различий в данных в базах данных, это звучит глупо, но, возможно, роли на самом деле не существуют, или ApplicationIds разные. При необходимости запустите SQL Profiler для приложения, использующего разные базы данных, и убедитесь, что запросы совпадают, а возвращаемые данные совпадают.

...