在C#中,如何允许用户根据各自的角色使用不同的方法?
目前有3个角色-在C#中,如何允许用户根据各自的角色使用不同的方法?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,目前有3个角色-Admin、Manager和Writer。 在HomeController中有一些方法,其中大多数对于Admin和Manager都是通用的,很少只用于Admin,很少用于Writer。大约有30种方法。管理员和经理通常有25个,只有Admnin有1-2个。3个角色中的1-2个 每个人只能使用一个名为ForWriterOnly()的方法 Writer不应该有权访问任何其他方法,但是Admin和Manager应该有权访问 有些方法只适用于管理员,而不适用于管理员和编写器 实现上述
Admin
、Manager
和Writer
。
在HomeController
中有一些方法,其中大多数对于Admin
和Manager
都是通用的,很少只用于Admin
,很少用于Writer
。大约有30种方法。管理员和经理通常有25个,只有Admnin有1-2个。3个角色中的1-2个
- 每个人只能使用一个名为
的方法ForWriterOnly()
- Writer不应该有权访问任何其他方法,但是Admin和Manager应该有权访问
- 有些方法只适用于管理员,而不适用于管理员和编写器
ForWriterOnly()
,我如何排除大多数其他方法的Writer?我如何排除访问其他方法的Admin
我知道我可以为Admin和Manager的25个常用方法编写[Authorize(Roles=“Admin,Manager”)]
,但我正在寻找一个更简单的解决方案
请对我的代码进行修改,以便更容易理解。
[Authorize(Roles=“Admin,Manager,Writer”)]
公共类HomeController:控制器
{
ForEveryone()的公共异步任务
{
返回视图();
}
dminandmanager()的公共异步任务
{
返回视图();
}
ForWriterOnly()的公共异步任务
{
返回视图();
}
AdminOnly()的公共异步任务
{
返回视图();
}
dminandmanager1()的公共异步任务
{
返回视图();
}
dminandmanager2()的公共异步任务
{
返回视图();
}
...........
//还有大约30种其他方法对于管理员和经理来说都很常见
}
首先,如果您在控制器上方使用[Authorize(Roles=“Admin,Manager,Writer”)]
,则这将提供对整个家庭控制器及其对管理员,经理,Writer角色的操作的访问权限
有几种方法可以实现这一点,但在我看来,我会分离我的控制器。但为了简单起见,我将继续讨论你的情况
// Normally your controller will be accessible by only Authenticated users.
[Authorize]
public class HomeController : Controller
{
//In here you want your action to be accessible by everyone.
//So you dont have to give any attributes in here.
public async Task<IActionResult> ForEveryone()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager()
{
return View();
}
[Authorize(Roles = "Writer")]
public async Task<IActionResult> ForWriterOnly()
{
return View();
}
[Authorize (Roles = "Admin")]
public async Task<IActionResult> ForAdminOnly()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager1()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager2()
{
return View();
}
}
//通常只有经过身份验证的用户才能访问控制器。
[授权]
公共类HomeController:控制器
{
//在这里,您希望每个人都能访问您的操作。
//所以你不必在这里给出任何属性。
ForEveryone()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin,Manager”)]
dminandmanager()的公共异步任务
{
返回视图();
}
[授权(Roles=“Writer”)]
ForWriterOnly()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin”)]
AdminOnly()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin,Manager”)]
dminandmanager1()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin,Manager”)]
dminandmanager2()的公共异步任务
{
返回视图();
}
}
您可以为每个操作指定角色
如果使用控制器上方的[Authorize]。您应该使用[AllowAnonymous]执行希望所有人都能访问的操作
[授权]
公共类HomeController:控制器
{
[异名]
ForEveryone()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin,Manager”)]
dminandmanager()的公共异步任务
{
返回视图();
}
[授权(Roles=“Writer”)]
ForWriterOnly()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin”)]
AdminOnly()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin,Manager”)]
dminandmanager1()的公共异步任务
{
返回视图();
}
[授权(Roles=“Admin,Manager”)]
dminandmanager2()的公共异步任务
{
返回视图();
}
}
// Normally your controller will be accessible by only Authenticated users.
[Authorize]
public class HomeController : Controller
{
//In here you want your action to be accessible by everyone.
//So you dont have to give any attributes in here.
public async Task<IActionResult> ForEveryone()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager()
{
return View();
}
[Authorize(Roles = "Writer")]
public async Task<IActionResult> ForWriterOnly()
{
return View();
}
[Authorize (Roles = "Admin")]
public async Task<IActionResult> ForAdminOnly()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager1()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager2()
{
return View();
}
}
[Authorize]
public class HomeController : Controller
{
[AllowAnonymous]
public async Task<IActionResult> ForEveryone()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager()
{
return View();
}
[Authorize(Roles = "Writer")]
public async Task<IActionResult> ForWriterOnly()
{
return View();
}
[Authorize (Roles = "Admin")]
public async Task<IActionResult> ForAdminOnly()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager1()
{
return View();
}
[Authorize(Roles = "Admin, Manager")]
public async Task<IActionResult> ForAdminAndManager2()
{
return View();
}