我遇到了一些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方法等。
我真的很困惑,对此的任何指示都会很棒
答案 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
}