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

时间:2014-06-01 10:56:40

标签: c# asp.net asp.net-mvc entity-framework razor

我遇到了一些biff baff,在mvc5上使用这个新的asp会员资格

我正在尝试确定用户所处的角色然后,如果符合角色条件,则显示一个按钮。 我已经将按钮的代码连接起来如下:

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

很好很简单,如果用户处于'canEdit'角色,则显示创建按钮,对吧?......错了......

当我把它放入我的剃刀(chstml或其他任何东西)时。文件并加载页面我得到以下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方法等。

我真的很困惑,对此的任何指示都会很棒

1 个答案:

答案 0 :(得分:3)

奇怪的是,我刚刚在代码库中遇到过这个问题。我的一位开发人员正在使用“旧”的#39;用于检查用户是否处于特定角色的角色提供程序。这导致应用程序在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
}