gpt4 book ai didi

asp.net-2.0 - Roles.IsUserInRole 在以下简单场景中的行为是否符合预期?

转载 作者:行者123 更新时间:2023-12-03 21:32:14 24 4
gpt4 key购买 nike

在 .NET 2.0 中的自定义角色提供程序(继承自 RoleProvider)中,IsUserInRole 方法已被硬编码为始终返回 true:

public override bool IsUserInRole(string username, string roleName) { return true; }

在配置为使用此角色提供程序的 ASP.NET 应用程序中,以下代码返回 true(如预期):

Roles.IsUserInRole("any username", "any rolename"); // results in true

但是,下面的代码返回 false:

Roles.IsUserInRole("any rolename"); // results in false

注意 User.IsInRole("any rolename") 也返回 false。

  1. 这是预期的行为吗?
  2. 假设仅采用角色名称的重载仍会调用重写的 IsUserInRole 是否不正确?

更新:请注意,似乎没有适用于采用单个字符串的版本的覆盖,这导致了我在 #2 中的假设。

最佳答案

我查看了 .net 反射器中的 Roles.IsUserInRole(string rolename),它解析为以下内容:

public static bool IsUserInRole(string roleName)
{
return IsUserInRole(GetCurrentUserName(), roleName);
}

我会看一下您当前的用户。原因如下:

private static string GetCurrentUserName()
{
IPrincipal currentUser = GetCurrentUser();
if ((currentUser != null) && (currentUser.Identity != null))
{
return currentUser.Identity.Name;
}
return string.Empty;
}

我敢打赌这将返回一个空字符串,因为您要么没有当前用户,要么它的名称是一个空字符串或 null。

IsUserInRole(string username, string roleName) 方法中,靠近开头的地方有以下代码块:

   if (username.Length < 1)
{
return false;
}

如果您的 GetCurrentUserName() 没有返回任何有意义的内容,那么它将在调用您重写的方法之前返回 false。

要远离这一点:Reflector 是一个很棒的工具:)

关于asp.net-2.0 - Roles.IsUserInRole 在以下简单场景中的行为是否符合预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/362907/

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