为什么我会在控制器属性中硬编码用户权限?

Rob*_*vey 8 c# security asp.net-mvc role-based

我见过这样的示例代码,看起来非常合理:

[Authorize(Roles = "Admin, User")] 
public class SomeController : Controller 
Run Code Online (Sandbox Code Playgroud)

但我也看到了几个看起来像这样的例子:

[Authorize(Users = "Charles, Linus")] 
public class SomeController : Controller 
Run Code Online (Sandbox Code Playgroud)

我为什么要这样做?我无法想象任何我希望建立一个事先知道其用户名的系统的场景.

Dav*_*fer 3

有一些合法的用途,这里有一个例子:如果您正在构建一个非常简单的网站,只有一个管理员帐户和一个未经身份验证的帐户,您可以这样做

[Authorize(Users = "Admin")] 
Run Code Online (Sandbox Code Playgroud)

这省去了您为单个用户构建角色的麻烦。想想 UNIX 风格,其中 root 帐户(uid 0)是特殊的而不是特定的组。

另一个例子是一个简单的一次性应用程序,您正在其中测试某些内容。如果您只想测试身份验证页面或类​​似的内容,则没有理由担心角色。

还有一个原因:测试。您可以仅为您的身份验证构建单元测试,而无需对基于角色的框架进行单元测试。(请记住,并非每个人都使用默认的成员资格提供程序,并且某些成员资格提供程序非常复杂。)通过为测试用户创建硬编码身份验证,您可以绕过角色框架。