微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 CASL 限制要修补更新的字段值?

如何解决如何使用 CASL 限制要修补更新的字段值?

在阅读指南和谷歌搜索一段时间后,我在 CASL 中找不到解决我的用例的方法

预期

  • 普通用户只能修补他的约会。
  • 普通用户只能将 appointment.status 从 'created' 修补到 'cancelled'(不能修补其他值,例如 'kept')。

(status 字段可能具有以下值之一:'created','cancelled','kept','broken'...但某些值如 'kept,broken' 只能由用户更新具有特殊角色,例如“主管”,而不是普通用户。)

我的代码

// define rules
async function defineAbilitiesFor(user) {
    if(user) {
        can('patch','appointments',{ user_id: user.id,status: 'created' });
        // No where to define rule for limit status to be patched
    }
}

// test rules
const appointment = {...,user_id:1,status:'created' };
const toPatch = { status: 'cancelled' };
ability.can('patch',appointment); // No where to check `toPatch` data

$in 不适合我的情况

can('patch',status: {$in: ['created','cancelled'] }); 不能解决两个问题:

  • 普通用户仍然可以将约会更新为其他状态,例如“已中断”; (因为约会只能由主管用户设置中断)
  • 普通用户可以将约会从“已取消”更新为“已创建”; (因为预约只能取消一次。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。