【发布时间】:2017-06-27 15:04:32
【问题描述】:
对于这样一个笼统的问题,必须有一个简单的解决方案,所以我为我的无知预先道歉:
我有一个多用户 Web 应用程序(带有 EF6 的 Asp.net MVC5)。允许用户查看和/或修改存储在多个相关表(Company、Csearch、Candidate)中的相关数据。 (有关更多详细信息,请参见下文)。他们不应看到任何其他数据(例如通过篡改 URL)。
我使用 Asp.net Identity 2.0 进行身份验证,也希望将其用于上述授权。用户数据存储在标准 AspNetUser 表中。我对 Identity 和我的业务表只使用一个上下文。
我想我必须使用角色或声明来解决这个问题,但我找不到任何关于如何做到这一点的指导。谁能指出我正确的方向?
我目前已经通过向 CompanyController 添加 LINQ 条件来解决它(对于公司模型),但这似乎不是解决问题的一种非常安全和正确的方法。
public ActionResult Index(int? id, int? csearchid)
{
var companies = db.Companies
.OrderBy(i => i.CompanyName)
.Where(t => t.UserName == User.Identity.Name);
return View(companies);
我的 DataModel 很简单,我使用 Visual Studio 2017 搭建了它 首先通过EF6代码我构建了一个关系数据模型,大致如下:
一个公司可以有多个搜索(一对多)。 每个搜索可以有多个候选(一对多)。 一个公司可以有多个用户登录。 用户保存在由 ASP.Net Identity 生成的 AspNetUsers 表中。
我的公司模型如下所示:
public class Company
{
public int CompanyID { get; set; }
// Link naar de Userid in Identity: AspNetUsers.Id
[Display(Name = "Username")]
public string UserName { get; set; }
public string CompanyName { get; set;}
public string CompanyContactName { get; set; }
[DataType(DataType.EmailAddress)]
public string CompanyEmail { get; set; }
public string CompanyPhone { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
//One to Many Navigatie links
public virtual ICollection<Csearch> Csearches { get; set; }
【问题讨论】:
-
你所做的就是其中的一部分。您可能需要更精细的访问权限,对于角色,使用带有角色或自定义属性的
Authorize属性。
标签: c# asp.net-mvc linq asp.net-identity