gpt4 book ai didi

asp.net-mvc-4 - MVC 4 中的自定义授权和角色不起作用

转载 作者:行者123 更新时间:2023-12-02 03:15:04 25 4
gpt4 key购买 nike

我需要在应该调用 Com+ 组件的地方实现单点登录来验证用户身份并提供角色。简而言之,我需要绕过 MVC 4 中尝试访问 aspnetdb 数据库的默认机制。因此,我从一个新的 MVC4 互联网项目开始,并添加了以下代码。

在 Global.asax

public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs args)
{
bool retval = CreateUserObject("John", "pwd");
}

private bool CreateUserObject(string userName, string password)
{
string[] currentUserRoles = { "Admin", "User" };
GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(userName), currentUserRoles);
HttpContext.Current.User = userPrincipal;
//Thread.CurrentPrincipal = userPrincipal;
return true;
}

在 HomeController.cs 中,我为“关于”操作添加了 [Authorize] 属性,如下所示,它按预期工作

[Authorize]
public ActionResult About()

但是,如果我修改 [Authorize] 属性以仅允许“管理员”角色,如下所示,我会收到运行时错误(在底部)。有没有办法解决这个问题,为登录用户使用我自己的角色集合,而不是查询数据库?我还需要执行与用户配置文件类似的操作(即,我应该填充 Com+ 应用程序中的值,而不是数据库。

[Authorize(Roles = "Admin")]
public ActionResult About()

“/”应用程序中的服务器错误。

与 SQL Server 建立连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:SQL 网络接口(interface),错误:26 - 定位指定的服务器/实例时出错)

最佳答案

也许您需要创建一个自定义 RoleProvider,如下所示:

namespace DemoApp.Providers
{
public class MyCustomRoleProvider : System.Web.Security.SqlRoleProvider
{
public override string[] GetRolesForUser(string username)
{
string[] currentUserRoles = { "Admin", "User" };
return currentUserRoles;
}
}
}

并在应用程序的 web.config 中,更改默认角色提供程序:

<system.web>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="DemoApp.Providers.MyCustomRoleProvider, DemoApp"/>
</providers>
</roleManager>
<system.web>

关于asp.net-mvc-4 - MVC 4 中的自定义授权和角色不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138888/

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