【问题标题】:Authorization on data access in .net MVC.net MVC 中的数据访问授权
【发布时间】:2014-03-12 16:09:03
【问题描述】:

我有一个包含两个实体的应用程序:

public class Employer {
    public string Title {get;set;}
    public virtual ICollection<Application> Applications {get;set;} 
}

public class Application {
    public string Title {get;set;}
}

我想授予用户访问特定雇主的权限(一个雇主可以有多个用户),以便他们可以为其雇主提交申请。这也包括对“你的”雇主的看法。 为了解决这个问题,我想到了以下两种可能:

  1. 创建雇主时,也会创建相应的角色。然后可以将用户添加到该角色中,我将编写一些自定义逻辑来检查用户是否在相应的角色中。这里的难点在于,似乎很难以任何安全的方式将角色与雇主联系起来(无需编写我自己的角色提供者)

  2. 在 Employer 类中添加用户集合等属性,并检查当前登录的用户是否在此集合中,以确定用户是否具有访问权限。

这些是好的解决方案,还是有更好的方法来解决我的问题?

【问题讨论】:

    标签: .net asp.net-mvc authorization asp.net-mvc-5


    【解决方案1】:

    这是 DAO(数据访问对象)的问题,目前没有使用实体框架(mvc 5 标准和 asp.net 身份)自动执行此操作的方法。

    一些建议:

    1) 它很容易创建或覆盖并使用您自己的规则的“RoleManager”和“UserManager”。

    2) 您可以封装数据访问,使用代理或包装器之类的东西从实体框架中获取数据

    唯一你肯定无法克服(如果你想使用的话)是“自定义映射”,我的意思是...... Employer 的集合属性总是会根据映射配置加载数据,并且映射配置有点受限(不支持自定义子句,比如关系中的 where)。

    【讨论】:

      【解决方案2】:

      我不会为此使用角色。角色通常用于控制对功能的访问,而不是数据子集(尽管有例外)。

      现在,您可能会遇到这样的问题:您的员工受雇于不止一家公司,并且他们对每家公司拥有不同的权限。在这种情况下,默认角色提供者不足以胜任该工作。

      但是,如果用户都具有相同的功能,但他们只能访问不同的数据子集,那么解决方案是根据公司过滤您的数据。例如,公司实体将有一个雇员集合。任何其他数据都将与公司相关联。然后,在显示或编辑数据时,一定要查询数据属于当前用户所在公司的条件。一般来说,最好在 sql(或 ef)查询本身而不是在应用程序的代码中执行此操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-17
        • 2013-01-31
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        相关资源
        最近更新 更多