C#如何实现管理面板来控制用户和角色访问控制器方法的能力?

C#如何实现管理面板来控制用户和角色访问控制器方法的能力?,c#,asp.net,entity-framework,model-view-controller,C#,Asp.net,Entity Framework,Model View Controller,我是C#的新手,在授权方面遇到了麻烦 到目前为止,我一直使用类似于[Authorize(Roles=“Admin,Manager”)]的标记,但现在我必须找到一种实现管理页面的方法,该页面可以从列表中选择控制器方法,并授予用户或角色使用这些方法的权限 我已经看到了该问题的可能解决方案,如基于索赔或基于行动的授权,但不确定它们是否提供了我需要的解决方案。 我知道我很可能需要两种方法来解决这个问题(一种用于用户,另一种用于用户组),但如果不在整个控制器中使用[Authorize]属性,我想不出如何使

我是C#的新手,在授权方面遇到了麻烦

到目前为止,我一直使用类似于
[Authorize(Roles=“Admin,Manager”)]
的标记,但现在我必须找到一种实现管理页面的方法,该页面可以从列表中选择控制器方法,并授予用户或角色使用这些方法的权限

我已经看到了该问题的可能解决方案,如基于索赔或基于行动的授权,但不确定它们是否提供了我需要的解决方案。 我知道我很可能需要两种方法来解决这个问题(一种用于用户,另一种用于用户组),但如果不在整个控制器中使用
[Authorize]
属性,我想不出如何使每个方法之间的链接成为目标


非常感谢您的帮助

我不能正确理解你的问题。可能提供一个合适的用例! 但据我所知,您必须使用声明/角色来验证哪个用户可以访问哪个资源。话虽如此,如果您想了解授权用户的声明,您可以通过各种方式进行。您可以通过
this.User
访问控制器的用户对象来获取“用户”声明。在某些情况下,这是不可能的。您还可以通过
线程
获得它

编辑:现在我在办公桌旁,一些示例代码:

方法1:

[System.Web.Mvc.Authorize(Roles = "Superadmin, Admin, User")]
方法2:

if (this.User.IsInRole(UserRole.Superadmin.ToString()))
{
    // Special code for SuperAdmin
}
方法3:

// This can be used where you don't have access to this.User
var userName = Thread.CurrentPrincipal.Identity.Name; // Identity has all the claims
User user = _userRepository.Query(x => x.UserName == userName).FirstOrDefault();

if (user.Roles.Any(r => r.Name == UserRole.Superadmin.ToString()))
{
     // Special code for SuperAdmin
}

附言:我也是C#的新手。刚过去一周。:)

为什么不换一种方式,将用户(组)分配给控制器方法?为什么不想使用
[Authorize]
?将此属性用于基于声明的授权,其中声明是控制器名称并注册自定义策略,这需要这些声明,仅此而已。