В выходные я реализовал собственный RoleProvider с пользовательской аутентификацией. Используя бизнес-шаблон Silverlight, я смог добавить атрибут [RequRole ("Admin")] в запрос на обслуживание:
[RequiresRole("Admin")]
public IQueryable<P_BUDGET> GetBudgets()
{
return this.ObjectContext.P_BUDGET;
}
Это сработало как шарм. Я использовал следующий код
Затем я зашел в библиотеку авторизации Кайла Макклеллана. Если в моем XAML (s: Authorization.RequiresRole = "Admin") установить атрибут "requireRole" в HyperlinkButton, он успешно скрывает кнопку при загрузке приложения. Когда я вошел в систему, я ожидал, что он определит роль «Администратор», в которой находится мой тестовый пользователь, в конечном итоге изменив видимость этого HLB на true. Однако, когда я перехожу через код, я попадаю в файл App.Web.g.cs, и у него есть эта функция:
public bool IsInRole(string role)
{
if ((this.Roles == null))
{
return false;
}
return global::System.Linq.Enumerable.Contains(this.Roles, role);
}
В приведенном выше коде this.Roles имеет значение null. Что мне здесь не хватает? Первый блок кода использует метод «GetRolesForUser», который я переопределил, и возвращает список ролей из представления, которое у меня есть в моей БД. Второй использовал IsInRole, который я прочитал не то, что вы должны изменить.
Ваша помощь приветствуется!