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 图基于附加到根的规则。