基于角色/权限的表单授权/认证?
在调查表单授权/身份验证时,我发现可以通过向FormsAuthenticationTicket添加角色数组来执行基于角色的授权。这样,我可以写基于角色/权限的表单授权/认证?
User.IsInRole(role from database)
但是有什么办法做到像角色的权限相同的事情:
if (User.IsInRole(role from database)) {
if (User.CanRead()) {
//--- Let the user read
}
if (User.CanWrite()) {
//--- Let the user write
}
}
我读了几篇文章和论坛帖子的其中添加权限到阵列而不是角色,导致使用
User.IsInRole(permission from database)
但是,这不是一回事。希望有人可以在这个问题上提供一些意见,或者链接到一篇文章或更好的代码示例。
你最好改变你对角色的看法。如果有帮助,使用术语“许可”或“声明”。然后创建您需要的所有角色,并将给定的用户链接到所有必要的角色。
一个用户可以属于多个角色。这样,下面的简单代码就可以正常工作,并且不需要建立自己独特的工作方式。
if(User.IsInRole(someRole) && User.IsInRole(someOtherRole))
{
// do something
}
你可以做一些C#扩展方法,使这个更具可读性太:
if(User.IsInSomeRoleAndOtherRole())
{
// do something
}
扩展方法可以看起来像下面。用下面的代码创建一个新类,然后在你的代码中包含类命名空间,并且可以使用上面显示的扩展方法。
using System.Security.Principal;
namespace MyCompany
{
public static class MyExtensions
{
public static bool IsInSomeRoleAndOtherRole(this IPrincipal principal)
{
if (!principal.IsInRole("someRole"))
return false;
if (!principal.IsInRole("someOtherRole"))
return false;
return true; // the user meets the requirements
}
}
}
+1是的,这很酷。 – griegs 2009-11-06 00:44:38
好吧,我会这样做的。你能告诉我如何制作扩展方法吗? – 2009-11-06 06:43:40
非常感谢; o) – 2009-11-08 10:26:43
为什么还原?不知道这与认证(标签)有什么关系,因为User.CanRead和User.CanWrite都是授权方法。 http://www.duke.edu/~rob/kerberos/authvauth.html – mxmissile 2009-11-17 18:10:41