Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#.NET 4.5基于活动的授权WebForms(非MVC)_C#_Asp.net_Authentication_Webforms_Asp.net Authorization - Fatal编程技术网

C#.NET 4.5基于活动的授权WebForms(非MVC)

C#.NET 4.5基于活动的授权WebForms(非MVC),c#,asp.net,authentication,webforms,asp.net-authorization,C#,Asp.net,Authentication,Webforms,Asp.net Authorization,目前,我正在尝试在我的webform应用程序中实现基于活动的授权。在我的应用程序中,您有不同的角色:管理员、经理、员工和实习生 应用程序通过我的BLL(业务逻辑层)与我的数据库通信,我正在尝试做的是在BLL中对我的所有实体的所有读卡器和管理器文件进行方法级授权,如下所示: [Authorize(Activity = "CreateUser")] public static void InsertUser( ... ) [Authorize(Activity = "UpdateEmployee"

目前,我正在尝试在我的webform应用程序中实现基于活动的授权。在我的应用程序中,您有不同的角色:管理员、经理、员工和实习生

应用程序通过我的BLL(业务逻辑层)与我的数据库通信,我正在尝试做的是在BLL中对我的所有实体的所有读卡器和管理器文件进行方法级授权,如下所示:

[Authorize(Activity = "CreateUser")]
public static void InsertUser( ... )

[Authorize(Activity = "UpdateEmployee")]
public static void UpdateEmployee( ... )
对于每个方法,我都需要一个CRUD活动,在数据库中,我想告诉哪些角色可以执行什么活动,或者类似的事情

除了登录之外,基于角色的安全性不是一个选项,因为例如,学员不允许插入或删除任何数据,但一个实体除外。因此,我需要在我的webforms中使用基于权限/活动的授权

目前我所能找到的只是MVC和.NET Core的解决方案,但没有针对webforms的解决方案,或者是2011年ish发布的文章,这些文章并没有真正提供解决方案,我想知道到目前为止是否有人有任何新的想法或解决方案

在我的项目中,我使用FormsAuthentication,在我的webconfig文件中,我自动调整特定角色和特定角色的路径。但这并不能解决问题。我还使用了全局文件中的应用程序_OnPostAuthenticateRequest,其中FormSideEntity和我的自定义主体类使用了IIDentity和IPrincipal

此外,我的AddEdit页面是同一页面,并且基于URL中传递的查询字符串(如userId或employeeId),保存按钮决定它是插入还是更新。这就是为什么我需要对方法进行身份验证的原因


所以我的问题是,有人知道我可以在asp.net 4.5 webforms中实现一种模式吗?这种模式可以获得权限或基于活动的授权,而无需对所有内容进行硬编码,因此更适合未来使用。

角色很久以前就存在于asp.net中,您可以看看它们(第一次点击谷歌:,我打赌那里有更好的页面)但是我需要基于活动的身份验证,而不是基于角色的身份验证。这是一个很大的区别。我已经实现了基于角色的身份验证,但它不适合应用程序的需要。这就是为什么我在方法级别上寻找基于活动的身份验证。有什么区别吗?想象一下这些角色:CreateUser、UpdateEmployee等等(用户可能有多个角色)。我将进一步介绍角色和权限之间的区别。一个活动可能需要一个或多个角色。另一步:使用简单的表达式解析器(如NCalc)解析授权表达式(如
“[administrators group]”或[create employee]“
,在复杂的场景中,您可能不希望对每个操作都有不同的权限(这是一个需要维护的噩梦,但基于角色的混合方法).Hm是的,我理解只创建大量角色的意义,并为用户提供多个角色来执行某些操作。但是,您如何继续实现它以使方法被拒绝呢?我不希望在每个方法中编写代码来检查当前用户的角色,如果他不需要角色来重定向用户或其他什么。以及我不确定你所说的NCalc解析器解析授权表达式的确切含义如果您不想在每个调用中添加这个逻辑,那么您可能会考虑使用AOP方法。NCalc只是一个简单表达式的易于使用的解析器的示例。对于需要多于一个角色(x和y和z)的方法,它可能是有用的。,一组角色(X或Y或Z)或复杂规则(例如,
[Administrator]或([Editor]和[Business]而非[Traineer])
)中的一个角色。如何检查?取决于此逻辑的位置。。。