gpt4 book ai didi

permissions - 创建自定义声明类型的最佳实践

转载 作者:行者123 更新时间:2023-12-03 23:49:06 26 4
gpt4 key购买 nike

给定一组特定的权限,例如EditPage、CreateProject、ModifyUser,我目前正在研究两种不同的方法来创建一些自定义声明类型来模拟这种行为。我在网上几乎找不到有关执行此操作的最佳方法的信息,并希望获得有关您如何在自己的系统中执行此操作的反馈。

我考虑的第一种方法是使用“ Action ”声明类型,具体 Action 由声明的值指定:

var claims = new [] 
{
new Claim("http://schemas.company.com/claims/project/action", "EditPage"),
new Claim("http://schemas.company.com/claims/project/action", "CreateProject"),
new Claim("http://schemas.company.com/claims/project/action", "ModifyUser")
}

第二种方法是使用声明类型本身来定义正在执行的操作,不使用值。这就像一种“PossessProperty”风格的安全性,只要用户拥有声明类型,他们就可以执行操作。
var claims = new [] 
{
new Claim("http://schemas.company.com/claims/project/editpage", ""),
new Claim("http://schemas.company.com/claims/project/createproject", ""),
new Claim("http://schemas.company.com/claims/project/modifyuser", "")
}

另请注意,在上面的声明类型中,我包含了一个“项目”鉴别器,以便我可以区分可以在项目 A 中编辑页面但不能在项目 B 中编辑页面的用户。

我们还计划将所有这些自定义声明存储在一个中央“授权”数据库中,因此需要唯一性。

任何想法或反馈将不胜感激。

最佳答案

好吧-您没有提供有关您意图的更多详细信息-但是如果您打算将这些声明作为用户身份的一部分-这显然是一种反模式。

声明描述了用户的身份(可能包括粗粒度的授权数据,如角色)。要做出更细粒度的授权决策,请使用 .NET 中的 ClaimsAuthorizationManager 之类的东西。

在此可扩展性点中,您可以根据以下情况做出明智的决定

a) 用户的身份
b) 用户试图访问的资源
c) 用户试图对资源进行的操作

换句话说 - 声明是您授权决定的输入,而不是直接答案。

关于permissions - 创建自定义声明类型的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844034/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com