上下文
很多人都喜欢将安全性作为正交关注进行讨论,但是我(目前?)没有参与其中,尤其是在考虑实例级安全性时,因为它与之无关紧要。领域模型。底线是,我实际上更喜欢,#3中的安全不变量在代码中明确说明(通过代码或通过Spring Security EL注释)。我认为这些安全不变量是业务逻辑的一部分。我也希望开发人员面对安全。它与IMO的责任不正确。
我可能会写一些类似的东西:
@PreAuthorize("hasRole('CSR_ITEM_WRITER') or #item.seller.id == principal.id')
public void setPrice(Item item, Money price) { ... }
我意识到这在创建安全模型时会产生一定程度的不灵活性(但考虑到错误的含义,这是一件坏事吗?)
我们还讨论了CS Rep必须“成为”卖方的方法。这有一定的清洁度(因为它确实围绕域而不是用例关注安全模型)。 (N.B。将进行足够的审核以检测某人是否代表他人行事)
评论
答案 0 :(得分:0)
我认为你做得恰到好处。当你说安全是一个正交的问题,正交什么?当你说这应该是业务逻辑的一部分时,你是110%的权利。
我会保留REP和卖方之间的分离。两者都是独特的角色;对于这种特殊情况,它们碰巧有重叠。
鉴于在这种情况下对安全性的重要程度,我希望你会编写一个单独测试的风暴,以证明给定附加角色的适当结果。
答案 1 :(得分:0)
我认为你所做的是一个好主意(我现在正在做类似的事情)。
我建议你看一下Spring安全性中的PermissionEvaluator组件(参见here),因为它比普通的注释有一些优势