HasPermission 在父级上为 false,但在子级上为 true
HasPermission is false on parent but true on child
我有 parent/childs 关系并且都使用 AuthorizationRule。保存总是在父级上完成。对于某些用户,他们无权修改父项但有权修改子项。如果父级 HasPermission returns false,即使父级不脏,它也会在保存时失败。
Public MustInherit Class EditObjectRule
Inherits AuthorizationRule
Public Sub New()
MyBase.New(AuthorizationActions.EditObject)
End Sub
Protected Overrides Sub Execute(ByVal context As AuthorizationContext)
context.HasPermission = False
End Sub
End Class
我是否应该在进行安全检查之前查看父实例并查看它是否脏?
Public MustInherit Class EditObjectRule
Inherits AuthorizationRule
Public Sub New()
MyBase.New(AuthorizationActions.EditObject)
End Sub
Protected Overrides Sub Execute(ByVal context As AuthorizationContext)
If context.Target Is Nothing Then
context.HasPermission = False
ElseIf CType(context.Target, IBusinessBase).IsSelfDirty Then
context.HasPermission = False
Else
context.HasPermission = True
End If
End Sub
End Class
看起来很奇怪,但我没有看到任何其他选项。
数据门户与(create/read/save)一个object图交互,而不是图中的单个object。
因此,您无法直接保存 child object,您总是通过单数根 object(可能是您的parent object)。像这样,其中 r 是根,l 是 child object 的列表,c 是每个 child.
r - l - c
- c
- c
(有 种高级方法来保存个人 child object,但这不是正常路径)
这最终意味着根 object 的权限才是对数据门户真正重要的权限。 child object 的权限是 "hints" 到 UI 关于用户 can/can 不能对 child 做什么,但是你是否可以create/read/update object 图基于附加到根的规则。
我有 parent/childs 关系并且都使用 AuthorizationRule。保存总是在父级上完成。对于某些用户,他们无权修改父项但有权修改子项。如果父级 HasPermission returns false,即使父级不脏,它也会在保存时失败。
Public MustInherit Class EditObjectRule
Inherits AuthorizationRule
Public Sub New()
MyBase.New(AuthorizationActions.EditObject)
End Sub
Protected Overrides Sub Execute(ByVal context As AuthorizationContext)
context.HasPermission = False
End Sub
End Class
我是否应该在进行安全检查之前查看父实例并查看它是否脏?
Public MustInherit Class EditObjectRule
Inherits AuthorizationRule
Public Sub New()
MyBase.New(AuthorizationActions.EditObject)
End Sub
Protected Overrides Sub Execute(ByVal context As AuthorizationContext)
If context.Target Is Nothing Then
context.HasPermission = False
ElseIf CType(context.Target, IBusinessBase).IsSelfDirty Then
context.HasPermission = False
Else
context.HasPermission = True
End If
End Sub
End Class
看起来很奇怪,但我没有看到任何其他选项。
数据门户与(create/read/save)一个object图交互,而不是图中的单个object。
因此,您无法直接保存 child object,您总是通过单数根 object(可能是您的parent object)。像这样,其中 r 是根,l 是 child object 的列表,c 是每个 child.
r - l - c
- c
- c
(有 种高级方法来保存个人 child object,但这不是正常路径)
这最终意味着根 object 的权限才是对数据门户真正重要的权限。 child object 的权限是 "hints" 到 UI 关于用户 can/can 不能对 child 做什么,但是你是否可以create/read/update object 图基于附加到根的规则。