2009-09-09 90 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的例子。

一般来说,声明式意味着代码组织实现安全性的代码从其他代码(例如业务逻辑)脱离。通常所有的安全工件集中在一个地方,这简化了两个组件的开发:业务逻辑和安全。