C# 如何基于用户Id创建身份验证和授权

C# 如何基于用户Id创建身份验证和授权,c#,asp.net-mvc-5,asp.net-authorization,asp.net-authentication,C#,Asp.net Mvc 5,Asp.net Authorization,Asp.net Authentication,我对ASP.NETMVC5还很陌生。我试图用用户和管理员构建一个预订应用程序。用户可以在登录后使用自己的配置文件注册自己和预订项目,并显示自己的预订信息 我希望用户能够登录到他们的个人资料并创建/阅读他们自己的预订。他们只有在登录后才有权使用自己的个人资料。管理员应该有权访问所有控制器 我试图找到一个这样做的教程,但我只能基于角色限制对控制器的访问,例如;管理员,但不是由特定用户使用自己的Id,例如;User1只能访问User1信息 我很感激任何回应。非常感谢。这是一个多租户应用程序,因此您应该

我对ASP.NETMVC5还很陌生。我试图用用户和管理员构建一个预订应用程序。用户可以在登录后使用自己的配置文件注册自己和预订项目,并显示自己的预订信息

我希望用户能够登录到他们的个人资料并创建/阅读他们自己的预订。他们只有在登录后才有权使用自己的个人资料。管理员应该有权访问所有控制器

我试图找到一个这样做的教程,但我只能基于角色限制对控制器的访问,例如;管理员,但不是由特定用户使用自己的Id,例如;User1只能访问User1信息


我很感激任何回应。非常感谢。

这是一个多租户应用程序,因此您应该阅读一些关于多租户的内容。此外,这与索赔授权非常配合,所以您也应该阅读它

您可以创建一个简单的权限模型,具有3个权限:读取、创建、编辑。每个用户对资源都有一个或多个声明资源可以是其配置文件的URL,也可以是数据库中的用户id。每个资源声明可以对用户可以在此资源上执行的操作拥有一个或多个权限

通过这种方式,您可以向用户授予对其自己的配置文件条目的完全权限R、C、E。此外,用户还可以向其他用户授予一些权限,例如,他可以向每个人授予阅读权限,或者向他的朋友授予编辑权限。这使得用户成为自己配置文件的“管理员”,并且他可以向其他用户授予一些有限的权限

您可以将权限分组为角色,因此当您为用户提供角色时,会自动为用户创建所有权限和声明


对于控制器操作,您可以查找ClaimsAuthorizeAttribute,其中有一些是这样的:。此外,在IdentityServer项目中有一个很棒的库,其中有很多助手:

User1只有访问User1信息的权限才是controller操作中业务逻辑的一部分,我认为,因为在查询数据库之前,您不知道所请求的项是否与User1关联。因此,您必须查询它,然后返回一个禁止的响应,如果结果是他们无法访问的项目。同样,如果您的操作只是获取用户配置文件,那么当操作运行时,您知道用户是谁,因此您可以始终只返回他们自己的配置文件,这应该是不可能获得其他用户的配置文件的。非常感谢!我想到了在控制器中实现逻辑。但我不知道如何正确地实施它。例如,我有一个预订控制器Index int Id,它可以接收用户Id以将他们重定向到自己的预订。用户是一个角色,因此如果一个用户登录,他们仍然可以将URL更改为其他用户Id以检查其他用户的预订。我想限制这一点。所以,在这种情况下,您仍然必须执行action方法。但是,当您查询数据库时,您可能会发现用户实际上是否拥有该预订的权限。如果没有,您可以返回一条错误消息,而不是预订信息。如何执行权限检查?我正在考虑将Id存储到ViewBag中,以检查它是否符合其请求的Id,但这可能是一个糟糕的做法。先生,我想听听您的意见=我认为viewbag与此无关。在最简单的情况下,数据库中的Bookings表应该有一列,其中包含对该预订具有权限的用户的用户ID。请求的预订ID将在操作方法的参数中显示。您从数据库中读取该行,该行的主键为booking ID,然后检查关联的用户ID是否与当前登录用户的ID匹配。如果有,则显示预订详细信息。如果不是,则显示错误。