我对MVC很新,并使用ASP.NET MVC 4开发应用程序。对于身份验证,我在域中使用Windows身份验证和Active Directory。下一步是授权用户(不使用成员资格)。经过几篇文章仍然找到一个好方法。
我有自己的3个数据库表(Users
,Roles
,UserRoles
),以维护具有多个管理级别的授权用户。这是很多很多。例如,可能存在“admin”(对具有创建权限的系统的完全访问权限),“数据操作员”(仅针对部分的更新权限)和“支持用户”(只读/仅查看访问)。由于这是多对多的 - 用户可能是“支持用户”以及“数据输入操作员”。
对于特定部分,我需要根据方法控制访问。例如,假设有一个名为“InvoiceController”的控制器。可能有如下方法。
CreateNewInvoice() // Accessible only by admin
UpdateInvoice(...) // Accessible for admin and data operator
ViewInvoice(...) // Accessible for admin, data operator and support user
(只有角色表中存在的用户才能访问系统。其他人访问被拒绝。)
请告诉我如何根据存储在数据库中的角色在方法级别使用身份验证。
答案 0 :(得分:2)
您可以通过两种方式实现:
创建一个自定义AuthorizeAttribute
,您可以在其中加载并检查角色。
但更好的解决方案是创建自定义IPrincipal/IIdentity
并在Application_OnPostAuthenticateRequest
中分配。通过这样做,您可以充分利用内置授权模型,而无需进一步自定义。
请在此处查看我的回答:https://stackoverflow.com/a/10949178/70386