ASP .Net MVC用户所有权和授权

时间:2017-03-08 09:37:22

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

我是MVC新手,并试图建立一个简单的网络应用程序,用户可以注册和登录(已经完成了与MVC的Identity示例)并创建了一些对象(例如,做一个项目在列表)基本上与它们绑定,除非它们另有说明。

基本上,如果没有另外说明,其他用户无法看到或编辑待办事项。

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

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

2 个答案:

答案 0 :(得分:2)

在我看来,它更多的是应用程序逻辑而非授权。实现它的最简单方法是查询当前登录用户创建的项目,以便显示这些项目或进行编辑。

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

  1. 只允许管理员用户查看/编辑某些内容(基于角色的授权)
  2. 允许访问年龄超过18岁的用户(基于声明的授权)
  3. 仅限来自特定地理位置的用户(同样基于声明)
  4. 从示例中可以看出,授权不太适合过滤从数据库获取的行(如您的情况)。

    经验法则可能是尝试使用授权属性标记操作或页面。所以如果你想做个性化授权"您将不得不为每个用户创建操作/页面,这不是您正在尝试做的事情吗?

答案 1 :(得分:1)

使用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); 
}