Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NETMVC用户所有权和授权_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.NETMVC用户所有权和授权

C# ASP.NETMVC用户所有权和授权,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我是一个MVC新手,尝试构建一个简单的web应用程序,用户可以在其中注册和登录(MVC的Identity sample已经完成了),还可以创建一些基本上绑定到它们的对象(例如,列表中的to do项),除非它们另有说明 基本上,如果没有另外说明,其他用户无法查看或编辑待办事项 我试图完成的第一步是仅用我用户的项目填充列表 有人能给我指出正确的方向吗?使用它,它将处理您的任何注册和用户管理,您甚至可以根据您的需要进行定义。现在,假设您有一个如下所示的模型,并且您希望确保实体是由定义的用户构建的,您将

我是一个MVC新手,尝试构建一个简单的web应用程序,用户可以在其中注册和登录(MVC的Identity sample已经完成了),还可以创建一些基本上绑定到它们的对象(例如,列表中的to do项),除非它们另有说明

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

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

有人能给我指出正确的方向吗?

使用它,它将处理您的任何注册和用户管理,您甚至可以根据您的需要进行定义。现在,假设您有一个如下所示的模型,并且您希望确保实体是由定义的用户构建的,您将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的值,您都可以调用identity方法来获取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); 
}
希望这能给你一个想法

更新

假设要将第一组数据插入数据库,并且必须由用户定义。然后,您必须按如下方式填充模型:

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

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

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

  • 仅允许管理员用户查看/编辑某些内容(基于角色的授权)
  • 允许访问年龄大于18岁的用户(基于声明的授权)
  • 仅来自特定地理位置的用户(同样基于索赔)
  • 正如您从示例中看到的,授权不太适合于筛选从数据库获取的行(如您的案例)


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

    解释得很好。谢谢,我肯定需要更多地了解授权和相关事宜!非常感谢,这帮助我走上了正确的道路!只是一个简单的后续问题:当我创建一个对象时,我如何自动将我的用户ID设置为它?@Iris您是先使用实体框架代码还是先使用数据库?我想我自己得到了!在Create方法中,我设置item.user_id=user.Identity.GetUserId();。这是一个好方法吗?@Iris我解释过使用first insert to database:)@Iris确实它给了你userid的值