Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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.NET标识实现权限_C#_Asp.net_Asp.net Mvc 5_Asp.net Identity_Identity - Fatal编程技术网

C# 使用ASP.NET标识实现权限

C# 使用ASP.NET标识实现权限,c#,asp.net,asp.net-mvc-5,asp.net-identity,identity,C#,Asp.net,Asp.net Mvc 5,Asp.net Identity,Identity,我们目前正在使用ASP.NET标识开发一个较小的ASP.NET MVC 5应用程序。它允许我们维护不同的项目及其任务。我们最近实现了基本的身份验证,这样我们就可以在我们的网站上注册一个用户并登录他们 我们希望能够在项目的基础上管理访问权限,这样我们就可以对每个用户说,他有读、写、管理或没有指定项目的权限 我的第一个想法是,我们可以在数据库中创建一个简单的新表来存储用户权限。但我觉得可能有一种内置的方法可以通过ASP.NET身份实现这一点 所以我的问题是,我们应该走哪条路——手动构建一个新表来管理

我们目前正在使用ASP.NET标识开发一个较小的ASP.NET MVC 5应用程序。它允许我们维护不同的项目及其任务。我们最近实现了基本的身份验证,这样我们就可以在我们的网站上注册一个用户并登录他们

我们希望能够在项目的基础上管理访问权限,这样我们就可以对每个用户说,他有读、写、管理或没有指定项目的权限

我的第一个想法是,我们可以在数据库中创建一个简单的新表来存储用户权限。但我觉得可能有一种内置的方法可以通过ASP.NET身份实现这一点

所以我的问题是,我们应该走哪条路——手动构建一个新表来管理权限,或者使用ASP.NET Identity提供的内置功能

使用ASP.NET Identity提供的内置内容

在那里,你唯一可以使用的是声明或角色,而这两者都不是为你想要的东西而构建的

因此,我将使用您自己的表,该表将项目链接到用户,例如:

public class UserProjectRights
{
    [Key]
    public ApplicationUser User { get; set; }
    [Key]
    public Project Project { get; set; }

    public AccessRight Right { get; set; }
}
然后,每当你做一些需要特定权利的动作时,你需要检查一下。有几种方法可以做到这一点。在我的应用程序中,我创建了如下“访问权限检查扩展”(我为所有“访问权限实体”定义了一个公共接口,以“重用”该方法):

假设
AccessRight
是一个类似以下的枚举:

[Flags]
public enum AccessRight
{
    View,
    Edit,
    Admin
}
然后,您可以在逻辑中执行以下操作:

if (user.CanView(project) == true)
{
    // show project
}

我使用了
bool?
,因此我可以实现不同的“默认行为”,因为我知道如果返回
null
,则没有定义权限。

本文可能会帮助您做出决定:asp.net identity中没有内置的用户权限概念,因为它们是非常特定于应用程序的概念。有一个用户角色的概念,它只是用户的逻辑分组。您通常会对一个角色应用一组特定的用户写入。如果我理解正确,您会建议为每个访问限制(读/写/管理)创建一个角色对于每个项目?然后在每个对某个项目或与项目相关的实体执行某些操作的控制器中,您需要检查用户是否对给定的(父项)具有适当的权限项目。
这里唯一可以使用的是声明或角色,两者都不是为您想要的IMO而构建的
-我以前很高兴地使用声明来提供OP描述的“项目上的角色”行为。@ChrFin后者。仅仅创建一个表是不够的。这并不是你的答案中所要求的,但是OP和未来的访问者可能会感到困惑。@Rawling:但是当你有很多项目时,你会得到很多声明和巨大的cookies,这是不推荐的…@CodeCaster:我现在用一个简单的用法示例更新了我的答案。你认为这足以帮助人们进入这样一个系统,还是我应该详细说明?
if (user.CanView(project) == true)
{
    // show project
}