- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 ASP.NET Identity 2.0,我想确定登录的用户是否属于“admin”角色。在我的种子方法中,我创建了 3 个不同的角色,如下所示:
var store = new UserStore<ApplicationUser>(context);
var userManager = new ApplicationUserManager(store);
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
string roleName = "admin";
if (!roleManager.RoleExists(roleName))
{
roleManager.Create(new IdentityRole(roleName));
}
roleName = "superuser";
if (!roleManager.RoleExists(roleName))
{
roleManager.Create(new IdentityRole(roleName));
}
roleName = "user";
if (!roleManager.RoleExists(roleName))
{
roleManager.Create(new IdentityRole(roleName));
}
var user = new ApplicationUser() { Email = "nsg@gmail.com", UserName = "Niclas" };
userManager.Create(user, "123456");
userManager.AddToRole(user.Id, "Admin");
取决于用户是否是管理员,他需要在导航栏中看到不同的链接,所以我编写了这段代码:
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
@Html.ActionLink("Lenio", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
@if (Roles.IsUserInRole(User.Identity.Name,"admin"))
{
<li>@Html.ActionLink("Admins", "Index", "Admins")</li>
<li>@Html.ActionLink("SuperUsers", "Index", "SuperUsers")</li>
<li>@Html.ActionLink("Users", "Index", "Users")</li>
<li>@Html.ActionLink("Areas", "Index", "Areas")</li>
<li>@Html.ActionLink("CDs", "Index", "CommunicationDevices")</li>
<li>@Html.ActionLink("Houses", "Index", "Houses")</li>
<li>@Html.ActionLink("Lendings", "Index", "Lendings")</li>
<li>@Html.ActionLink("Logs", "Index", "Logs")</li>
<li>@Html.ActionLink("Sensors", "Index", "Sensors")</li>
}
@if (User.IsInRole("user"))
{
<li>@Html.ActionLink("User", "Index", "Din bruger")</li>
}
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@Html.Partial("_LoginPartial")
</div>
</div>
</div>
问题是,当代码到达 @if (Roles.IsUserInRole(User.Identity.Name,"admin"))
部分时,我得到一个 {"Invalid object name ' dbo.aspnet_SchemaVersions'。”
异常。我的数据库中没有 aspnet_SchemaVersions 表,我也不需要它。这是与我拥有的身份相关的表格的图片:
数据库托管在 azure 上。
更新
DavidG 发布了一个解决初始问题的答案,但没有解决我无法使用的问题:
[Authorize(Roles = "admin")]
我需要能够使用这个属性,但我不能,因为我得到这个异常:
> [SqlException (0x80131904): Invalid object name 'dbo.aspnet_SchemaVersions'.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1789294
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5340642
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +244
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1691
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +275
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +1421
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +208
System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +163
System.Web.Util.SecUtility.CheckSchemaVersion(ProviderBase provider, SqlConnection connection, String[] features, String version, Int32& schemaVersionCheck) +392
System.Web.Security.SqlRoleProvider.CheckSchemaVersion(SqlConnection connection) +64
System.Web.Security.SqlRoleProvider.GetRolesForUser(String username) +753
System.Web.Security.RolePrincipal.IsInRole(String role) +9625099
System.Linq.Enumerable.Any(IEnumerable`1 source, Func`2 predicate) +146
System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext) +333
System.Web.Mvc.AuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext) +379
System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +143
System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState) +1680
System.Web.Mvc.Async.WrappedAsyncResult`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +59
System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151
System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout) +94
System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +559
System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +82
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +73
System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151
System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +105
System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +588
System.Web.Mvc.Controller.<BeginExecute>b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) +47
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +65
System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151
System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +139
System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +484
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +50
System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +98
System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +73
System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +151
System.Web.Mvc.Async.AsyncResultWrapper.Begin(AsyncCallback callback, Object callbackState, BeginInvokeDelegate`1 beginDelegate, EndInvokeVoidDelegate`1 endDelegate, TState invokeState, Object tag, Int32 timeout, SynchronizationContext callbackSyncContext) +106
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +446
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +88
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +50
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
最佳答案
此错误的原因是您的应用程序尝试首先使用旧版本的身份进行连接。您不应使用对象的“旧”版本来管理角色。使用新的 UserManager
和 RoleManager
类。
例如:
var store = new UserStore<ApplicationUser>(context);
var userManager = new ApplicationUserManager(store);
if(userManager.IsInRole(userId, "NameOfRole")
{
//do stuff
}
要在您的 View 中使用它,您可以创建自己的助手:
namespace MyProject.MyNamespace.MyExtensions
{
public static class IdentityExtensions
{
public static bool IsInIdentityRole(this IPrincipal user, string role)
{
var userManager = GetUserManager(); //implement this!
return userManager.IsInRole(user.Identity.GetUserId(), role);
}
}
}
确保您的 View 了解此命名空间,将此行添加到您的 Views 文件夹中的 web.config
文件中(不是主要的 web.config
!):
<add namespace="MyProject.MyNamespace.MyExtensions"/>
然后像这样在你的 View 中使用:
@if (User.IsInIdentityRole("admin"))
{
<li>@Html.ActionLink("Admins", "Index", "Admins")</li>
}
关于c# - ASP.NET Identity 2.0 Roles.IsUserInRole 给出 {"Invalid object name ' dbo.aspnet_SchemaVersions'."} 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26626534/
在查询中写入以下内容有区别吗: SELECT * FROM dbo.Product 相比于: SELECT * FROM [dbo].[Product] 一个比另一个好还是无关紧要? 最佳答案 没有区
这是有效的 dbo.dbo 吗?如果是,那是什么意思?我在别人写的查询中发现了这一点: 从dbo.tmp_BDCode aob inner join dbo.dbo.tmp_BDCode_03 ao
当我创建一个新表时,我知道我可以执行以下操作: CREATE TABLE Users ( [Id] INT NOT NULL PRIMARY KEY ) 但是 [dbo].以下示例中的部分含义
我正在将一个使用 Membership 的现有网络应用程序移植到一个使用 Identity 的新应用程序。我已经更新了所有表定义,在 VS Community Edition 2015 版本 14.0
我正在使用 Entity Framework 5 并执行一个简单的查询以从表中获取一些用户。 SQL 数据库已经创建,所以我使用我的实体作为映射我所拥有的东西的一种方式。 当我运行我的查询时,我检测到
我使用了以下分割函数: CREATE FUNCTION dbo.Splitfn(@String varchar(8000), @Delimiter char(1)) returns @te
我使用的是 sql server 2008 r2。 我想为我的所有作业创建脚本以进行备份。 我需要找到一个作业中存在的所有对象。现在我可以做到了,但是 为了实现这个目标,我得到了这个查询的所有运算符
我有一个带有一些函数和触发器的 SQL 项目。 在 Visual Studio 2010 中,我可以只指定数据库连接字符串并进行部署。这很好用。 但是现在迁移到 Visual Studio 2013
我们的应用程序不需要身份使用的过多“登录”和“声明”功能。如果没有在数据库中创建这些表 simlpy 就好了,但我不想重新实现所有身份类... 我猜是这样的 public ApplicationDbC
我已经设置了正确的 SQL Server 版本并添加了 master 数据库作为数据库引用。 在添加引用之前和之后,master 数据库有几个 Unresolved 引用,所有这些引用都消失了。 只有
我刚刚在 TFS2012 服务器上下载并安装了 Team Foundation Server 2012 Update 1,现在无法配置构建 Controller 或编辑构建定义。 我从这里下载了更新:
我在服务器中发送请求。 $custormerParams = array( "CustomerID" =>123, "CustomerAltID" =>'cus
您好,我在 sqlserver 2008 中创建了一个 udf 函数...当我尝试访问它时出现错误“无效的对象名称 'dbo.Function_Client”我想从表中返回记录数并将其分配给变量以返回
当我扫描我的数据库时,它显示了一个结果,如 VA1143 'dbo' user should not be used for normal service operation in 漏洞评估扫描 他们
我已经尝试用以下 100 种不同的方式编写代码,但无法找出正确的语法。看来无论我怎么写, $loggeduser 都不会传递给 WHERE 用户名。我究竟做错了什么?什么是正确的语法? $query
在我的本地或专用服务器上,当我创建一个表时,我看到表名如下: dbo.Foo 因为我从某个 plesk 环境中获得了一个数据库帐户,所以创建的表的名称为: mydbuser.Foo 前缀对我的代码有何
我从旧的 sql server (2000) 导入了一堆表到我的 2008 数据库。所有导入的表都以我的用户名为前缀,例如:jonathan.MovieData。在表 properties 中,它将
我的一位同事给我一项任务,要确保存储过程中的所有表名和页面都包含相关模式? 例如,如果我在数据库中有一个表是 dbo.table1,那么在查询中如果我有: Select * from table1 他
我收到此错误:[SqlException (0x80131904): Invalid object name 'dbo.UserRoles'.],但我无法捕捉到错误所在。我可以从其他表中检索其他数据,
在此问题上,我的SQL出现问题,我已经从sys.servers中选择了*,以检查是否列出了我的服务器。 我还从sys.servers中执行了查询选择名称,并且列出了我的服务器名称。 这是我的代码
我是一名优秀的程序员,十分优秀!