gpt4 book ai didi

asp.net-mvc - Controller 类中授权角色的继承

转载 作者:行者123 更新时间:2023-12-04 18:28:54 25 4
gpt4 key购买 nike

我创建了 Controller 类来协助角色授权。

我有一个基类 ControllersAuthorities ,这是最高级别的权限。我创建了其他类来扩展每个基类。

[Authorize(Roles = "Owner")]
public abstract class ControllerAuthorities:Controller { }
[Authorize(Roles = "Admin")]
public abstract class AdminController:ControllerAuthorities { }

[Authorize(Roles = "Employee")]
public abstract class EmployeeController:AdminController { }
[Authorize(Roles = "Sales")]
public abstract class SalesController:EmployeeController { }

第一个问题,请问 Owner , AdminEmployee角色可以访问 SalesController ?

在我的项目 Controller 中实现这些类时。
如果我离开 [Authorize]未注释,这会覆盖继承的权限角色吗?
//[Authorize]
public class AccountController:ControllerAuthorities
{

最佳答案

看着 AttributeUsage Authorize 的属性attribute ;

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Method, 
Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
Inherited= true表示用该属性修饰的类的子类可以继承该属性。
AllowMultiple=true意味着该属性可以多次放置在同一个实体上。

使用继承的属性并允许使用相同的属性,您的 SalesController可以认为是
[Authorize(Roles = "Sales")]
[Authorize(Roles = "Employee")]
[Authorize(Roles = "Admin")]
[Authorize(Roles = "Owner")]
public abstract class SalesController:EmployeeController { }

您可以在运行时使用此代码进行测试。
var a = typeof(SalesController).GetCustomAttributes(true).ToArray();

第一个问题 ,将 Owner , AdminEmployee角色可以访问 SalesController ?
继承的属性是分开的,所以它们是独立应用的。对于一个用户访问 SalesController , 用户必须拥有所有角色( owneradminemployeesales )而不是其中之一。

查看两者的区别
[Authorize(Roles = "Sales")]
[Authorize(Roles = "Employee")]
[Authorize(Roles = "Admin")]
[Authorize(Roles = "Owner")]
public abstract class SalesController:EmployeeController { }


[Authorize(Roles = "Owner,Admin,Employee,Sales")]
public abstract class SalesController:EmployeeController { }

第二个问题 : 如果你离开 [Authorize]用相同的逻辑取消注释 AccountController就好像
[Authorize(Roles = "Owner")]
[Authorize]
public class AccountController:ControllerAuthorities{}

因此它不会覆盖继承的权限,只是创建了授权属性的多次使用,因为 Authorize 允许多次使用。属性。如 AllowMultiple分别是 falseAuthorize属性定义然后派生类可以覆盖基类中的属性。

关于asp.net-mvc - Controller 类中授权角色的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32741403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com