.Net Membership в nTier Приложении

Вы попробовали getImageData метод?

var data = context.getImageData(x, y, 1, 1).data;
var rgb = [ data[0], data[1], data[2] ];
10
задан Jay 10 September 2009 в 21:10
поделиться

8 ответов

На мой взгляд, это слабость дизайна членства / ролей.

Я бы решил обойти это, например, чтобы иметь авторизацию на основе ролей на уровнях UI и BLL в распределенное n-уровневое приложение должно было бы предоставлять сервис на уровне BLL, который предоставляет соответствующие биты (GetRolesForUser и т. д.) и реализуется путем вызова RoleProvider на сервере.

Затем реализуйте настраиваемый RoleProvider на клиенте, который является реализуется путем вызова службы, предоставляемой BLL.

Таким образом, уровень пользовательского интерфейса и уровень BLL совместно используют один и тот же RoleProvider. Уровень пользовательского интерфейса может использовать сведения о ролях текущего пользователя для улучшения пользовательского интерфейса (например, скрытие / отключение элементов управления пользовательского интерфейса, соответствующих неавторизованным функциям), а BLL может гарантировать, что пользователи не могут выполнять бизнес-логика, для которой они не авторизованы.

4
ответ дан 4 December 2019 в 04:01
поделиться

Get your User object to implement the IPrincipal interface and throw that around the layers. Then you can still use the built in [Autorize] attribute.

Athough written over 3 years ago and about castle, this article may help. It starts getting into the IPrincipal stuff half way down.

HTHS
Charles

0
ответ дан 4 December 2019 в 04:01
поделиться

Отличный вопрос, я задал себе то же самое сегодня . Одна из моих идей (но я не совсем уверен, что это лучший вариант) - использовать интерфейс (например, IRoleProvider), который вы можете передать своему BLL для проверки доступа.

public static bool IsRoleEditor(User user, IRoleProvider rp)
{
     return (rp.IsUserInRole(user,"ModifyRoles"));
}

С этим, вы по-прежнему подтверждаете свой доступ в BLL,

1
ответ дан 4 December 2019 в 04:01
поделиться

Ролевой доступ обычно не должен находиться в BLL. Доступ является обязанностью пользовательского интерфейса.

С учетом сказанного, используйте интерфейс IPrinciple, как указано на вышеприведенных плакатах. У вас есть доступ к IPrinciple на уровне потока.

Thread.CurrentPrincipal
-1
ответ дан 4 December 2019 в 04:01
поделиться

Почему бы не передать роли в ваш BLL, чтобы у вас не было никакой зависимости от членства. Или используйте интерфейс, подобный предложенному Мартином Б.

Что произойдет в будущем, когда ваши заинтересованные стороны решат использовать другую форму аутентификации, и вы больше не будете работать с объектом Роль ?

] Пример:

IsRoleEditor(User user, string[] roles)
{
  return roles.Contains("ModifyRoles");
}
0
ответ дан 4 December 2019 в 04:01
поделиться

Вы не упускаете из виду MVC. MVC естественным образом разбивается на уровни. Модель (DAL), контроллер (BLL), View (презентация). Они могут быть включены в разные проекты, если хотите, но поскольку у контроллера есть вся бизнес-логика - вам нужно только получить доступ к RoleProvider там.

Затем примените шаблоны, такие как репозиторий, шаблон и т. Д., Чтобы разделить дальше, если хотите.

Дэви

0
ответ дан 4 December 2019 в 04:01
поделиться

Вызов контроллера MVC «UI» неуместен. «C» в MVC является частью вашего BLL, даже если он ссылается на классы, которые вы позвонили бы в BLL. Однако ваш вопрос не в этом.

Думаю, я бы решил эту проблему, задав вопрос: «Существует ли реальное требование для 100% разделения вашего приложения« UI »и вашего« BLL »?». Если оба компонента имеют общую зависимость от поставщиков членов / ролей, пусть это будет так и приступайте к работе.

В случае, когда вы отключаете свой BLL и подключаете новый, возможно, имея общую зависимость от .NET провайдер - это то, с чем можно жить. Вы знаете, что это, вероятно, нормально, и ваше приложение может не развалиться.

Я думаю, что приведенный выше ответ Джо имеет большой смысл ...

0
ответ дан 4 December 2019 в 04:01
поделиться

Думаю, то, что вы делаете, нормально.

Авторизация и аутентификация должны находиться на уровне служб, который, возможно, передается в ваши контроллеры.

Если контроллер устанавливает принципала и личность, а затем вы используете это в контроллере с помощью атрибутов MVC, это звучит как хорошая идея.

Было бы неплохо скрыть вашего поставщика членства MVC за интерфейсом , таким образом вы можете поменять его на поставщика членства WinForms (например) и иметь возможность проводить модульное тестирование ваших контроллеров.

0
ответ дан 4 December 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: