MVC检查从数据库返回的用户是否是活动用户?

时间:2017-01-06 10:27:09

标签: c# asp.net-mvc database asp.net-identity asp.net-core-mvc

我在根据返回的项目从数据库中验证所选用户时遇到问题。我找到了一个解决方案,但我并不认为它是正确的(即使它正常工作)。

这是正在发生的事情(简化) 我有以下类连接到数据库:

public class Company
{
    [Key]
    public int Id { get; set; }
    public string CompanyName { get; set; }
    public string Description { get; set; }               
    public ApplicationUser CEO { get; set; }
}

这意味着一家公司可以拥有一名CEO(一家公司的所有者),但CEO可以拥有多家公司(不同的故事,现在只是解释)。

然后我有一个控制器 CompaniesController,如下所示:

public IActionResult Index()
{
    var items = _context.Companies.Include(n=>n.CEO).ToList();
    return View(items);
}

返回数据库中所有公司的List<Company>。此外,如果我不输入.Include(n=>n.CEO),那么CEO字段将为空。

最后在查看上,我有以下内容:

@foreach (var item in Model)
{
    <tr>
        <td>@item.CompanyName</td>
        <td>@item.Description</td>

        @if (@item.CEO?.Email == User.Identity.Name)
        {
            //Show edit button for CEO
            <td><a asp-action="Edit" asp-route-id="@item.Id">Edit</a></td>
        }
        else
        {
            //Logged user is not expected user therefore insert empty column and do not show button
            <td></td>
        }
    </tr>
}

我如何通过比较他们的电子邮件地址(用户需要被授权进入此页面,因此他将始终登录)来检查我的模型中返回的CEO是否被主动登录用户的方式。< / p>

问题:如果在List<Company>中检查每个项目的活跃用户是否为首席执行官,是否有更好,更优雅的方法?或者这是一种正确的方法吗?

此外,我将用户数据存储到Company数据库表的方式是否正确?我采用了本机身份模型,它在数据库中自动生成4或5个身份表,因此当我在SQL数据库中检查我的CEO字段时,我发现这只是对UserId的引用。

对此事项的任何帮助/建议都不胜感激。

1 个答案:

答案 0 :(得分:1)

1:您可以编写一个将在

上返回的辅助方法
def method(signed_in_user, company_id)
  # it will return if the user is CEO of that company id or Not
end

2:您可以使过滤器显示所有公司和拥有的公司像启动数据切换。

3:您可以进行两次数据库调用     1:user.companies(他是首席执行官)     2:companies.where(signed_in用户不是首席执行官)  写你的for循环。

我不参与C#编程,但这种模式可能会有所帮助