【问题标题】:ASP .Net MVC User ownership and authorizationASP .Net MVC 用户所有权和授权
【发布时间】:2017-03-08 19:15:05
【问题描述】:

我是 MVC 新手,正在尝试构建一个简单的 Web 应用程序,用户可以在其中注册和登录(已经使用 MVC 的 Identity 示例完成)并创建一些对象(例如,执行列表中的项目) 基本上与他们绑定,除非他们另有说明。

基本上,除非另有说明,否则其他用户无法查看或编辑待办事项。

我尝试完成的第一步是仅使用用户的项目填充列表。

有人可以指点我正确的方向吗?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    在我看来,这更像是一种应用程序逻辑,而不是授权。实现它的最简单方法是在您想要显示或编辑这些项目时查询当前登录用户创建的项目。

    授权不是关于显示特定用户内容(它是一种个性化),而是关于允许/限制用户访问特定页面或根据有关用户的信息和一组预定义的授权规则在门户上执行特定操作。以下是几个例子:

    1. 仅允许管理员用户查看/编辑某些内容(基于角色的授权)
    2. 允许 18 岁以上的用户访问(基于声明的授权)
    3. 仅限来自特定地理位置的用户(同样基于声明)

    正如您从示例中看到的那样,授权不太适合过滤从数据库获取的行(如您的情况)。

    经验法则可能是尝试使用授权属性标记操作或页面。因此,如果您想做“个性化授权”,您将不得不为每个用户创建操作/页面,这不是您想要做的吗?

    【讨论】:

    • 解释得很好。
    • 谢谢,我确实需要更多地了解授权和相关事宜!
    【解决方案2】:

    使用ASP.NET Identity,它将处理您的任何注册和用户管理,您甚至可以根据需要定义rolesclaims。现在假设您有一个像下面这样的模型,并且您想确保实体是由定义的用户构建的,您将 UserId 作为外键包含到您的模型中,因此它将由该用户定义,例如:

    public class CustomModel
    {
        public Guid Id { get; set; }
        public string ObjectExample { get; set; }
        public string ObjectExample2 { get; set; }
        //FK to user
        public string UserId { get; set; }
    }
    

    任何时候您想获取 UserId 的值,您都可以调用身份方法来获取 userId,如下所示:

    User.Identity.GetUserId()
    

    希望这能给你一个想法。

    更新

    假设您要将第一组数据插入到数据库中,并且必须由用户定义。那么你必须像下面这样填充你的模型:

    var entity = new CustomModel
    {
        Id = Guid.NewGuid(),
        ObjectExample = "string",
        ObjectExample2 = "secString",
        UserId = User.Identity.GetUserId() //Identity Lib will provide this method for you
    };
    using(MyDbContext context = new MyDbContext())
    {
        context.CustomModel.Add(entity); 
    }
    

    【讨论】:

    • 非常感谢,这帮助我走上了正轨!只是一个快速的后续问题:当我创建一个对象时,如何自动将我的 userId 设置为它?
    • @Iris 您是先使用实体​​框架代码还是先使用数据库?
    • 我想我是自己搞定的!在 Create 方法中,我设置了 item.user_id = User.Identity.GetUserId();。这是一个好的方法吗?
    • @Iris 我解释说使用第一次插入数据库:)
    • @Iris 确实为您提供了用户 ID 的价值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2011-04-18
    • 2018-12-15
    • 2014-06-09
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多