我自定义授权的这个问题我Views
的某些部分(我不想放在PartialView
上),而是我正在使用If
声明如下:
@if (item.CurrentComment.Id == Guid.Parse(ViewBag.UserId) || repository.IsUserInRoles(Guid.Parse(ViewBag.UserId),"Manager") )
{
<dd>
<a href="@Url.Action("EditComment", "Ticketing",new { id = item.CurrentComment.Id, ticketId = Model.Tickets.CurrentTicket.Id })" class="btn btn-primary btn-sm" data-toggle="tooltip" data-placement="left">Edit</a>
</dd>
<dd>
<a href="@Url.Action("RemoveComment", "Ticketing",new { id = item.CurrentComment.Id, ticketId = Model.Tickets.CurrentTicket.Id })" class="btn btn-danger btn-sm" data-toggle="tooltip" data-placement="left">Remove</a>
</dd>
}
目前我在我的控制器中获取UserId
并将其传递给下面的ViewBag:
ViewBag.UserId = User.Identity.GetUserId();
但我想知道如何直接在剃刀中调用GetUserId
方法,所以我不再用ViewBag发送它了。我尝试使用User.Identity.
,但方法是未知的,我认为它不知道扩展名。有办法吗?
答案 0 :(得分:15)
在视图文件的顶部添加以下using Microsoft.AspNet.Identity;
语句。
User.Identity.GetUserId()
在此之后,你应该可以使用
array = [[1,2,3,4]...]
for l in array:
l.append(l[-1]**2)
答案 1 :(得分:1)
如果有人正在寻找ASP.NET Core解决方案(就像我一个小时前一样),那么可以找到适合您的解决方案:
@using Microsoft.AspNetCore.Identity
var user = await UserManager.GetUserAsync(User);
var userId = user?.Id;
答案 2 :(得分:0)
只想补充一下我的看法,因为上述两个回答都对我不起作用。
@using Microsoft.AspNetCore.Identity
@inject UserManager<IdentityUser> userManager
@if (project.CreatorId == userManager.GetUserId(User))
{
//do something
}
我添加了
@using Microsoft.AspNetCore.Identity
@inject UserManager<IdentityUser> userManager
到_ViewImports.cshtml,因为我需要在多个视图中使用它。
答案 3 :(得分:0)
你也可以这样做。 将以下内容添加到视图文件的顶部
@using System.Security.Claims;
然后,就这样使用它
string userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;