gpt4 book ai didi

asp.net-mvc - 使用EF在MVC4中实现公司、部门、部门用户访问控制

转载 作者:行者123 更新时间:2023-12-01 22:55:12 24 4
gpt4 key购买 nike

这是我关于 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 View 中填充部门和部门选择列表为用户检索内容对象列表的优雅方式是什么?
  • 有没有更好的方法来建模这个访问控制列表?
  • 最佳答案

    我认为这还没有解决您的所有问题,但我认为一个看起来像这样的存储库:

    public class accessRepository
    {
    accessContext context = new accessContext();

    public IQueryable<Content> GetAccessibleContentFor(int userId)
    {
    var up = context.UserProfiles.Single(u => u.UserId == userId);
    var companyId = up.CompanyId;

    return from c in context.Content
    where c.CompanyId == companyId
    && (up.AccessControl.Any(
    a=>
    a.CompanyId == c.CompanyId &&
    a.DivisionId == c.DivisionId &&
    a.DepartmentId == c.DepartmentId)
    || up.AccessControl.Any(
    a=>a.CompanyId == c.CompanyId &&
    a.DivisionId == c.DivisionId &&
    a.DepartmentId == null)
    || up.AccessControl.Any(
    a=>
    a.CompanyId == c.CompanyId &&
    a.DivisionId == null)
    select c;
    }
    }

    如果出现以下情况,将允许您取回可访问的内容:
  • 内容属于用户的公司。
  • 用户可以访问公司、部门和部门的内容
  • 或者用户可以访问公司和部门(所有部门)的内容
  • 或者用户可以访问公司(所有部门)的内容[所有部门,在这种情况下假设。]
  • 关于asp.net-mvc - 使用EF在MVC4中实现公司、部门、部门用户访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15174925/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com