2009-09-09 48 views
3

這個問題的答案:Declarative Security--what's this? 沒有真正告訴我很多......根本沒有告訴我什麼是鈍的。什麼是「聲明式安全」?一般

我遇到了一個有關.NET中性能的博客,它提到了這一點:

你用聲明的安全?

如有可能,建議您使用聲明性安全性而不是強制性安全性檢查。目前的需求實施提供了更好的性能和支持,目前正在構建安全工具來幫助安全審計。

請注意,如果您的安全檢查在方法中是有條件的,則命令式安全性是您唯一的選擇。

鏈接:http://weblogs.asp.net/sanjeevagarwal/archive/2009/09/09/net-code-performance-tips-part-1.aspx

什麼是 「安全聲明」 代表什麼?有人可以舉一個具體的例子嗎?

回答

4

一般來說,它是基於註釋而不是編碼的安全性。例如,在.NET中,您可以將屬性應用於導致生成的代碼要求調用者擁有某些權限的方法。

這裏有一個具體的例子:http://www.knowdotnet.com/articles/securityattributes.html

+0

不錯,也是一個很好的例子。 – KdgDev 2009-09-09 19:15:31

9

聲明功能允許程序員來表達在設計時的意圖。這些意圖在語言引擎—的內部執行,換句話說,我們不知道它是如何完成的。一個例子是屬性:

[RequireDeletePermission] 
public void DeleteFile(string fileName) 
{ 
} 

聲明指出的DeleteFile方法不能沒有DeletePermission被調用。 (這是一個製作的例子。)運行時將爲您執行此規則。沒有更多的代碼是必需的。 SQL權限也適用於此類別。

您使用自己的代碼執行的策略稱爲命令。你可以使用任何語言機制來實現這一點,但代碼本身(而不是內置的構造)表達了你的意圖。當沒有正式的約束捕獲需要的確切限制時,你會在SQL觸發器中看到這種事情。

CREATE TRIGGER TR_UPD_fix_image_filename ON products AFTER UPDATE 
AS 
BEGIN 
    UPDATE product SET image=itemnumber + '.jpg' WHERE id IN (SELECT id FROM inserted) 
END 

(好吧,所以這是一個愚蠢的例子。在設計上,最典型的情況下,可以通過約束來處理。)

1

你可以看一下AOP的例子。

一般來說,聲明式意味着代碼組織實現安全性的代碼從其他代碼(例如業務邏輯)脫離。通常所有的安全工件集中在一個地方,這簡化了兩個組件的開發:業務邏輯和安全。