【问题标题】:MVC Check if returned user from database is active user?MVC检查从数据库返回的用户是否是活动用户?
【发布时间】:2017-01-06 10:27:09
【问题描述】:

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

这是发生了什么(简化)。
我有以下类连接到数据库:

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 可以有多个公司(不同的故事,现在只是解释)。

然后我有一个 Controller CompaniesController 如下所示:

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

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

终于在View上我有以下几点:

@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 是否是主动登录用户的方法是比较他们的电子邮件地址(用户需要被授权进入此页面,因此他将始终处于登录状态)。

问题:有没有更好、更优雅的方法来检查List&lt;Company&gt;中每个项目的活跃用户是否是CEO,或者这是一种正确的方法?

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

在此问题上的任何帮助/建议将不胜感激。

【问题讨论】:

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


    【解决方案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(他是 CEO) 2:company.where(签名用户不是ceo) 编写你的 for 循环。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-26
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多