我在这样的模型中有一组用户:
[Key]
[Required]
public int ID { get; set; }
[ForeignKey("Employee")]
public int? EmployeeID { get; set; }
public int? CompanyID { get; set; }
public string UserID { get; set; }
[DataType(DataType.Text)]
public string Firstname { get; set; }
[DataType(DataType.Text)]
public string Middlenames { get; set; }
[DataType(DataType.Text)]
public string Lastname { get; set; }
[DataType(DataType.Text)]
public string Address { get; set; }
[DataType(DataType.Text)]
public string Postnumber { get; set; }
[DataType(DataType.Text)]
public string City { get; set; }
[DataType(DataType.Text)]
public string Phone { get; set; }
[DataType(DataType.EmailAddress)]
[Required]
public string Email { get; set; }
[DataType(DataType.DateTime)]
public DateTime CreatedDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime EditedDate { get; set; }
[DataType(DataType.DateTime)]
public DateTime CurrentLoginTime { get; set; }
[DataType(DataType.DateTime)]
public DateTime LastLoginTime { get; set; }
public virtual Employee Employee { get; set; }
public virtual Company Company { get; set; }
我想做的是根据companyID是否有值在我的布局文件中显示一个菜单项。
在MVC5中,我可以立即执行此操作,但是在.net核心中,我不知道如何进行或搜索什么。
我希望这里的人可以告诉我,这是如何工作的,我应该怎么做:-)
答案 0 :(得分:1)
您在这里可以做的是创建一些服务(并在DI容器中注册),该服务可以弄清楚您的状况。然后,您可以将该服务注入视图,并在其上调用方法以检查值:
@inject MyUserService myUserService
@if (await myUserService.GetIsCompanyOwnerAsync(User))
{
<div>Item for company owner</div>
}
然后,在您的服务中,您可以注入数据库上下文并根据当前用户查询用户:
public class MyUserService
{
private readonly UserManager<User> _userManager;
public MyUserService(UserManager<User> userManager)
{
_userManager = userManager;
}
public async Task<bool> GetIsCompanyOwnerAsync(ClaimsPrincipal user)
{
var user = await _userManager.GetUserAsync(user);
return user.CompanyID.HasValue;
}
}
请注意,这将导致对每个请求进行数据库查询,以将其呈现在布局中。从长远来看,最好将此属性直接公开为对索赔主体的索赔,例如作为OwnsCompany
声明。这样,您可以直接在视图中检查索赔:
@if (await User.FindFirst("OwnsCompany") != null)
{
<div>Item for company owner</div>
}
答案 1 :(得分:0)
您可以创建一个ViewBag.IsCompanyOwnerMenuVisible
并为其分配逻辑:
ViewBag.IsCompanyOwnerMenuVisible = userInfo.CompanyID.HasValue;
然后在您的视图内:
@if(ViewBag.IsCompanyOwnerMenuVisible)
{
//Your menu code here
}
或者您可以直接在视图中查看它:
@if(Model.CompanyID.HasValue)
{
//Your menu code here
}
答案 2 :(得分:0)
我最终制作了一个继承自IdentityUser的ApplicationUser类。然后,我可以将IdentityUser在项目中弹出的所有位置更改为ApplicationUser。
然后在applicationUser中,我添加了我需要的属性,使用Add-migration添加了迁移,并更新了数据库。
我的ApplicationUser类如下:
<li>
<a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">
Hello @user.Fullname
</a>
</li>
在我的布局中,我可以使用以下命令调用属性:
{{1}}
我遵循了本教程: https://www.youtube.com/watch?v=tW5QwWPKXaY
希望这对其他人有帮助:-) 我标记了“戳”的答案,因为正是他指向声称的指针使我谷歌搜索;-)