2010-02-19 47 views
0

我正在构建一个Web应用程序,我希望用户具有执行特定操作的特定权限。我不想在ASP.NET中使用默认权限和角色提供程序。C#/ ASP.NET自定义权限执行指定操作

我在考虑让每个用户与一个角色关联。每个角色都映射到一组权限(CreatePost,ReadPost,UpdatePost,DeletePost等)。

我对此有几个问题。对于每个角色的权限或某种位域,最好是有一个布尔属性?我喜欢为此设置方法的想法,但需要将这些方法映射到为数据库中角色存储的权限。

另外,我将如何为每个动作/请求实现此目的?我在想什么是here,但我不确定。

谢谢!

+0

@TheCloudlessSky:你为什么不想使用角色提供者来做到这一点?你有什么需要与它冲突? – casperOne 2010-02-19 14:39:06

+0

@casperOne:这是一个非常大规模的企业应用程序,我不想重写方法并抛出NotImplementedException ...在我看来这不是很好。我非常想要一个自定义解决方案,以便我们可以完全控制一切。 – TheCloudlessSky 2010-02-19 16:34:28

+0

这是一个大规模应用程序,实际上是一个红鲱鱼,它与为什么会使用或不使用RoleProvider无关。此外,为代码中的自定义RoleProvider *现在更容易执行编码,而不是必须在您的代码中随处洒入方法调用*以提供安全性(与仅添加属性相反)。特别是对于大规模的应用程序来说,它是自我毁灭的,而不是**这种方式。 – casperOne 2010-02-19 16:38:54

回答

0

制作您自己的角色提供者并将其注册到web.config中。查看MSDN的示例。一旦它被注册,它将把你提供的角色和委托人关联起来。

我刚刚完成了我的项目之一,它工作正常。

要检查用户是否有权执行任务,您必须查看用户是否处于必需角色。在“正常”的ASP.NET中,你将不得不在代码中这样做。在MVC中,您可以使用控制器中每个类/方法的属性来完成此操作。

+0

“在'普通'的ASP.NET中,您将不得不在代码中执行此操作。” - 这不是真的。查看PrincipalPermissionAttribute(http://msdn.microsoft.com/zh-cn/library/system.security.permissions.principalpermissionattribute.aspx)默认的Membership API提供程序会挂钩到CAS中,您的自定义提供程序也可以。 – Nathan 2010-02-19 16:14:43

+0

使用ASP.NET提供程序的最大问题是您必须覆盖很多成员。另外,如果我不使用特定的方法,我必须抛出一个NotImplementedException(),这在我看来不是很好。 我如何使用自定义属性并拥有自己的角色实现而不使用角色提供者? – TheCloudlessSky 2010-02-19 16:32:51

+0

没错,在大多数情况下(成员资格和配置文件提供程序),实现中充满了NotImplementedExceptions。然而,RoleProvider并没有太多的方法,因此只有用于放弃,删除和更改角色的方法才会返回NotImplementedExceptions,恕我直言,它值得使用它。问题是,如果您不使用RoleProvider,则将角色附加到由ASP.NET身份验证创建的主体上非常困难。 – AxelEckenberger 2010-02-19 17:01:48