2010-02-24 2 views
9

Все материалы безопасности, с которыми я работал в прошлом в ASP.Net, по большей части были основаны на ролях. Это достаточно просто реализовать, и ASP.Net предназначен для такого типа модели безопасности. Тем не менее, я ищу что-то немного более мелкое, чем простая защита на основе ролей.Безопасность ASP.Net с использованием безопасности на основе операций

По существу я хочу, чтобы иметь возможность писать код так:

if(SecurityService.CanPerformOperation("SomeUpdateOperation")){ 
    // perform some update logic here 
} 

Мне также нужно будет грести доступ безопасности уровня, как это:

if(SecurityService.CanPerformOperation("SomeViewOperation", SomeEntityIdentifier)){ 
    // Allow user to see specific data 
} 

Снова, мелкозернистого контроль доступа. Есть что-то вроде этого уже построенного? Некоторые рамки, которые я могу зайти в ASP.Net и начать использовать, или мне придется строить это самостоятельно?

+0

@Josh: Вы когда-нибудь находили достойный способ реализации чего-то подобного? – Breadtruck

+0

Частично да. Я решил проблему с операцией, создав таблицу ролей в базе данных, в которой была привязана таблица xRef. Таким образом, я могу создать древовидную структуру ролей и использовать CTE для возврата сплющенной иерархии. Я создал пользовательскую роль и поставщики членства, чтобы выполнить грязную работу, и пусть ASP.Net обрабатывает все остальное. Это выглядит немного забавно в коде, потому что все это логически, но концептуально есть роли и разрешения. – Josh

ответ

1

Вы просматривали диспетчер авторизации (AzMan)? http://msdn.microsoft.com/en-us/library/bb897401.aspx

Он был включен в Server 2003 и имел несколько обновлений на сервере 2008 года и поставляется с инструментом администрирования MMC.

Вы можете хранить данные в файле xml или разделе AD/ADAM с использованием сервера версии 2003 года, а на сервере 2008 года они добавили поддержку SQL.

Этот инструмент позволяет связать объекты безопасности вместе в иерархической структуре ролей, задачах & операций.

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

+0

@squig, я посмотрел на AzMan изначально, потому что это звучало слишком хорошо, чтобы быть правдой. Возможно, я не придавал ей достаточно пристального взгляда, но, похоже, у меня было два основных «минуса», которые я видел. 1.) Поставщики ASP.Net AzMan поддерживают только очень небольшое подмножество общей иерархии, что делает его более полезным, чем обычные поставщики, и 2.) Он был тесно интегрирован с AD, чего я хотел избежать. Если можно использовать AzMan без интеграции AD, это может стоить того. На данный момент у меня есть собственные провайдеры, которые очень хорошо работают для моих нужд. – Josh

0

Я думаю, вы, возможно, ищете Декларативную безопасность. Декларативная безопасность позволяет вам хорошо «Объявить», кто может получить доступ к тому, что в качестве атрибутов кода здесь есть страница с поддержкой Role Based on on MSDN. Вот пример:

[PrincipalPermissionAttribute(SecurityAction.Demand, Role="admins")] 
public class foo 
{ 
    [PrincipalPermissionAttribute(SecurityAction.Demand, Role="Domain Admins")] 
    public void bar() 
    { 
     .... 
    } 
} 
+0

@Mgetz, я действительно много использую этот атрибут, но более конкретно то, что я искал, это способность составлять мелкозернистые действия/операции в роли. Я специально хотел не использовать роли в моем коде. Таким образом, я могу создать произвольные роли, которые состоят из любого количества разрешений и назначить эту роль пользователю. Затем пользователь получит доступ к этому подмножеству разрешений через свою роль. Я в основном сделал эту часть с помощью специального RoleProvider, но я удивлен, что никто этого уже не сделал. – Josh

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