在c#web app中实现多个角色和权限的最佳方法?

时间:2010-08-05 10:06:36

标签: c# permissions roles

我想在我们创建的Web应用程序上实现角色和权限,我正在使用System.Web.Security.SqlRoleProvider来实现这一点。 我的问题是每个客户端都希望能够配置谁能够和不能在系统中执行操作,并且没有两个客户端会想要相同的操作,因此创建基本的 管理员,用户,经理角色覆盖所有内容是不够的。

我建议为每个屏幕做的是创建角色如下

Screen1Create, Screen1Update, Screen1Delete, Screen1Read
Screen2Create, Screen2Update, Screen2Delete, Screen2Read

等等。

然后我会允许客户端选择每个用户的角色,当用户登录时,这些角色将存储在cookie中。

然后我可以读取cookie并使用user.isinrole来检查当前用户是否可以调用每个方法。

我意识到我需要注意一些带有cookie的大小限制。除了表明这听起来可行,还有更好的方法吗?

非常感谢任何意见。

2 个答案:

答案 0 :(得分:2)

真的,如果你想自己编程到cookie级别,你就有冒险打开安全漏洞的风险。执行此操作的方法是将表单身份验证与基于角色的授权相结合。 Asp.net将为用户提供防篡改cookie。

如果您实施角色,则可以轻松标记方法:

 [PrincipalPermission(SecurityAction.Demand, Role="Screen1Create")]

或使用代码查看某人是否担任某个特定角色。

很多信息: http://weblogs.asp.net/scottgu/archive/2006/02/24/ASP.NET-2.0-Membership_2C00_-Roles_2C00_-Forms-Authentication_2C00_-and-Security-Resources-.aspx

答案 1 :(得分:0)

请记住,Cookie是用户提供的输入,因此如果您要将用户的权限存储在Cookie中,则必须使用键控哈希函数(例如HMAC-SHA256)来确保用户不授予自己额外的权限。

或者,如果您将所有权限存储在数据库中,它将在客户端计算机上保持不变,并且每次您希望使用它时都不需要验证其完整性。