给定一组特定的权限,例如 EditPage、CreateProject、ModifyUser,我目前正在研究两种不同的方法来创建一些自定义声明类型来模拟这种行为。我在网上几乎找不到关于最佳方法的信息,并希望对您在自己的系统中如何做到这一点提供一些反馈。
我考虑的第一种方法是使用“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 中编辑页面的用户。
我们还计划将所有这些自定义声明存储在中央“授权”数据库中,因此需要唯一性。
任何想法或反馈将不胜感激。