这是我关于stackoverflow的第一个问题,所以请温柔一点。我正在使用 MVC4、Entity Framework 和 SimpleMembership 编写一个仓库应用程序的客户门户。仓库托管多家公司的内容。每个公司都有部门和部门。用户将对其公司、部门和部门的信息具有不同的访问权限。我正在寻找一种优雅的访问控制解决方案。到目前为止,我的模型如下所示:
public class UserProfile
{
UserProfile()
{
this.AccessControl = new HashSet<AccessControl>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public Nullable<int> CompanyId { get; set; }
public virtual ICollection<AccessControl> { get; set; }
public virtual Company Company { get; set; }
}
public class AccessControl
{
public int AccessControlId { get; set; }
public int UserId { get; set; }
public int CompanyId { get; set; }
public Nullable<int> DivisionId { get; set; }
public Nullable<int> DepartmentId { get; set; }
public Boolean ReadAccess { get; set; }
public Boolean WriteAccess { get; set; }
// other properties for access control
public virtual UserProfile UserProfile { get; set; }
public virtual Company Company { get; set; }
public virtual Division Division { get; set; }
public virtual Department Department { get; set; }
}
public class Content
{
public int ContentId { get; set; }
public int CompanyId { get; set; }
public int DivisionId { get; set; }
public int DepartmentId { get; set; }
// Various other properties
public virtual Company Company { get; set; }
public virtual Division Division { get; set; }
public virtual Department { get; set; }
}
我的想法是,NULL Division 表示所有部门,NULL Department 表示所有部门。我的问题是:
- 编写存储库方法以根据用户的访问控制列表以及在 CRUD 视图中填充部门和部门选择列表来检索用户的内容对象列表的优雅方法是什么?
- 有没有更好的方法来模拟这个访问控制列表?