我正在使用asp.net网页的现有代码,其中控制器中的方法根据用户所处的角色受到限制,如下:
namespace Principal.Controllers
{
[Authorize]
public class MyController: Controller
{
[Authorize(Roles = "Role1,Role2,Role3")]
public method1() {...}
}
}
问题在于允许的角色被声明的部分:
[Authorize(Roles = "Role1,Role2,Role3")]
我想使字符串动态,所以我可以从一个方法返回它取决于由管理员设置的属性,但它一直给我奇怪的错误,如"错误3属性参数必须是一个常量表达式,表达式的类型或数组创建表达式的属性参数类型"
正如您所发现的,您只能在定义属性时使用常量;这是因为属性被编译到代码中——你不能使用编译器在编译时不知道的表达式。
您可以做的是,创建一个继承AuthorizeAttribute
类的新属性,并覆盖OnAuthorize
。然后您可以在这里实现您的自定义角色逻辑。