SQL角色安全+自定义ASP.Net基页

时间:2010-02-08 22:33:55

标签: c# asp.net oop

我正在开发一个新的绿色领域ASP.Net应用程序。我们正在实现一个基页,所有页面都将基于。该应用程序将在Integrate Windows Auth下运行,因此我将拥有用户的帐户详细信息。有了这些,我将前往几个数据库(用户将在其中存在),以找出它们在每个数据库中分配的角色。我将在bool数组中持有yay / nay的角色,并通过枚举键入其中。

会有一个会话对象,它将包含一些内容,以及为该用户分配的角色。我正在考虑使会话对象可用作基页的属性,因为代码将是这样的:

public SessionObject MasterSessionObject
{
    get
    {
        if (Session["SessionObject"] == null)
        {
            // Create session object, assign user name, etc.
            // Do something with roles...
            Session["SessionObject"] = sessionObject;
        }
        return (SessionObject)Session["SessionObject"]
    }        
}

为了控制(子类)页面上发生的事情,我想提供一个CheckSecurity方法 - 例如如果用户未被授权访问页面的某个部分,则可以隐藏/禁用该用户,或者可以将其启动回“不属于您自己”页面。它的逻辑位置是基页,但是看到基页已经暴露了拥有角色权限的SessionObject,创建DatabaseSecurity类型对象并检查它是否更有意义?

处理后一种方法,到目前为止我使用抽象基类来获取:我有一个包含bool数组的DatabaseRoles抽象类,以及一个为用户检索角色的方法。具体实现持有一个Enum(如前所述)来键入数组(在基类中)。抽象类也有CheckRole方法,它接受一个int,我打算使用枚举的演员......

SessionObject包含几个这样的DatabaseRoles实现,基本上不需要基页类中的CheckSecurity,导致在实际页面中出现如下代码:

if (MasterSessionObject.SampleDatabaseRoles.Check((int)SampleDatabaseRolesEnum.RoleView))
{
    // Do something
}

但是,我相信你会同意,看起来很糟糕......

如果基页上有CheckSecurity方法,则必须采用具体的DatabaseRoles对象,还要检查哪个角色的枚举,这看起来也很糟糕。最后,需要在以后添加更多数据库及其安全设置......

如果需要,我明天会添加代码......: - s

我不知道,我不是那么厚,但我确实很难将所有这些结合在一起......

谢谢,

Mike K。

1 个答案:

答案 0 :(得分:0)

如果您碰巧使用ASP.Net / ASP.Net MVC,我会说最好的方法是通过自定义HTTP模块处理AuthenticateRequest方法&仅在请求已通过身份验证后才继续请求。这段代码在网上有很多优秀的文章。

另外 - 看看角色& ASP.Net的会员资格 - 非常好&通常满足大多数要求,或者您可以随意扩展它。再次 - 关于自定义会员提供商的大量文章...

除非我遗漏了什么 - HTH。