这是我的第一个问题在stackoverflow,所以请温柔。我正在使用MVC4,Entity Framework和SimpleMembership写入一个仓库应用程序的客户门户。仓库为多家公司提供内容。每个公司都有分部和部门。用户将拥有不同的公司,部门和部门信息。我正在寻找一个优雅的访问控制解决方案。到目前为止,我的模型是这样的:实现公司,部门,部门MVC4用户访问控制与EF
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; }
}
我的想法是,一个空司意味着所有部门和空指部各部门。我的问题是:
- 是编写库方法来检索内容对象的列表基于它们的访问控制列表上的用户以及在CRUD观点填充分工和部门选择列表优雅的方式?
- 有没有更好的方法来建立此访问控制列表?
你是否已经有了一个“不雅”的解决方案,可以改善?对于公司,部门和部门而言,可能出现的'空'案件很难解决问题,甚至更多的是一种“优雅”的解决方案,不会有冗长的案件延期序列。如果没有'null'sa查询可能是:'var query = from c in context.Contents join in a context.AccessControls on new {c.CompanyId,c.DivisionId,c.DepartmentId} equals new {a.CompanyId,a。 DivisionId,a.DepartmentId}其中a.UserProfile.UserId == givenUserId选择c;'但我未能扩展这个以覆盖'null's。 – Slauma 2013-03-02 14:47:25
关于您的部门/部门选择清单,您能否详细说明您对CRUD视图的设想? (即你想做什么可以做一个视图) – 2013-03-02 18:19:09
谢谢你的答案。如果用户A有两个访问控制对象。一个可以访问分区1,会计和另一个可访问分区1,财务部门,然后在创建,更新或删除时选择列表将为分部提供分区1,为部门选择列表提供会计和财务部。如果用户对所有部门(即部门为NULL)和部门销售部门都有一个访问控制对象,则选择清单将包含所有定义的部门,并且仅包含销售部门。 – tomc 2013-03-02 23:27:44