我正在开发一个新的绿色领域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。
答案 0 :(得分:0)
如果您碰巧使用ASP.Net / ASP.Net MVC,我会说最好的方法是通过自定义HTTP模块处理AuthenticateRequest方法&仅在请求已通过身份验证后才继续请求。这段代码在网上有很多优秀的文章。
另外 - 看看角色& ASP.Net的会员资格 - 非常好&通常满足大多数要求,或者您可以随意扩展它。再次 - 关于自定义会员提供商的大量文章...
除非我遗漏了什么 - HTH。