2010-09-07 2 views
2

Предположим, у нас есть две группы «Админы» и «Пользователи». Администраторы могут использовать любую операцию, доступную в службе, но пользователи могут использовать только некоторые из них.WCF RIA Services Авторизация

Должен ли я добавлять группу «Администраторы» к каждой отдельной операции, или если я просто напишу ее поверх класса, это сделает трюк?

Спасибо.

ответ

4

Несколько атрибутов RequiresRole объединены с символом AND, в то время как несколько ролей, переданных одному атрибуту, равны OR'd. В вашем случае вы захотите ИЛИ или атрибуты («Пользователь» или «Администратор»), поэтому вам придется применять «Администратор» к каждому отдельному методу.

// "Admin" & & "Пользователь", что эквивалентно использованию атрибутов класса "Admin"

[RequiresRole ("Администратор"), RequiresRole ("User")]

// "Админ" || "Пользователь"

[RequiresRole ("Администратор", "Пользователь")]

+0

Спасибо за ваш ответ. Если я назначу каждому пользователю, является ли он администратором или нет, мне не придется применять атрибут роли пользователя для каждой операции. Правильно? – mrtaikandi

+0

Ну ... Я так не думаю. Возможно, вы сможете применить «Пользователь» на уровне DomainService (вы должны быть пользователем для доступа к чему-либо), а затем выборочно применять «Admin» для отдельных операций (вы должны быть пользователем и администратором для использования этих методов). Я не думаю, что есть хороший способ сказать: «Вы должны быть администратором, чтобы использовать эти методы, если я не укажу что-то еще». –

0

У меня была такая же проблема. К сожалению, вы должны установить роли для каждого метода. В качестве альтернативы вы можете использовать saf-framework для реализации авторизации на основе доступа.

В противном случае я предлагаю вам перезаписать метод BeforeSubmit() вашей службы домена и проверить доступ к вашим объектам там, чтобы избежать чрезмерных атрибутов для каждого метода.

Например, вы можете изменить свою стратегию доступа, и вы не хотите проходить через каждый метод и делать это.