MVC5简单成员资格/默认成员资格

本文关键字:成员 默认 简单 MVC5 | 更新日期: 2023-09-27 18:06:03

在mvc5 上使用这个新的asp成员身份时,我遇到了一个biff baff

我试图确定用户的角色,然后在满足角色条件的情况下,显示一个按钮。我把按钮的代码连接起来如下:

<p>
@if(User.IsInRole("canEdit"))
{
@Html.ActionLink("Create New", "Create")
}
</p>

很好也很简单,如果用户处于"canEdit"角色,则显示创建按钮,对吗?。。。错误的

当我把这个放进我的剃须刀(chtml或其他什么东西(。文件并加载页面时,我得到以下与sql相关的错误:

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

需要注意的一些事项:

我有一个dbcontext,它有以下代码:

  public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this,     DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }
}
public class GameContext : IdentityDbContext<ApplicationUser>
{
    public GameContext() : base("DefaultConnection", throwIfV1Schema: false)
    {
    }
    public static GameContext Create()
    {
        return new GameContext();
    }

为简洁起见,道具已被移除。

-我在配置文件中有一个连接字符串。-我可以注册、登录、注销、删除、使用isAuthenticated方法等。

我真的很困惑,在这上面的任何指针都将是很棒的

MVC5简单成员资格/默认成员资格

奇怪的是,我刚刚在我们的代码库中遇到了这个问题。我的一个开发人员正在使用"旧"角色提供程序来检查用户是否处于特定角色。这导致应用程序在app_Data中创建一个LocalSql数据库,作为machine.config中仍然存在的所有数据库的配置。连接字符串和提供程序详细信息在machine.config中指定,因此web.config将只添加或删除它们。例如,如果你的machine.config说:

<connectionStrings>
    <add name="LocalSqlServer" connectionString="..."/>
</connectionStrings>

你的web.config有这个:

<connectionStrings>
    <add name="MyConnectionString" connectionString="..."/>
</connectionStrings>

您的应用程序将能够查看和使用这两个字符串。要修复它,你可以先清除连接字符串,如下所示:

<connectionStrings>
    <clear />
    <add name="MyConnectionString" connectionString="..."/>
</connectionStrings>

但这仍然留下了一个潜在的问题,即旧的角色(或配置文件(提供程序正在代码中使用。所以你在使用它时会得到很多错误。你需要像这样切换代码:

if (User.IsInRole("Admin"))
{
    //Do admin stuff
}

对于类似的事情(在我的例子中,_userManager的类型是UserManager<User>,并且在运行时被注入到我的控制器构造函数中

var user = _userManager.FindById(User.Identity.GetUserId());
if (_userManager.IsInRole(user.Id, "Admin"))
{
        //Do admin stuff
}