问题标签 [casl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
vue.js - CASL Vue - 如何在路由保护中访问 $can
我正在构建一个 Nuxt 应用程序并尝试创建一个路由守卫。如何访问$can
我的 Nuxt 中间件?
我在我的导入以下nuxt.config.js
:
我casl
在 Nuxt $auth 模块上添加插件:
这是因为我需要$auth.user
在我的插件中访问。
所有这一切都很好,除了我找不到$abilities
或$can
在我的 Nuxt 中间件中。
PS:我说的是这个包:@casl/vue
javascript - 使用 CASL 定义访问控制规则
我从链接中阅读了这篇文章,并了解有 3 种定义能力的方法。但我不知道将它们组合在一起。例如,
在上面的三个结构中,我想限制一些用户可以读/写/创建组,所以我选择使用 JSON 对象来定义能力如下:
每个用户都有不同的权限并存储在数据库中,以便我可以通过 in 将其从数据库中读取出来const ability = new Ability(user.permission.rules);
然后使用ability.can(Action.Read, 'Group')
。
但是,我不知道如何在“使用 JSON 对象”时添加更多的业务规则。例如,F组的用户只能读取F组,I和J,因为I和J在F组下,我该如何实现呢?
javascript - 如何使用 CASL 限制要修补(更新)的字段值?
在阅读指南并搜索谷歌一段时间后,我无法在 CASL 中找到解决我的用例的方法。
预期的
- 普通用户只能修补他的约会。
- 普通用户只能
appointment.status
从“已创建”修补到“已取消”(而不是其他值,例如“保留”)。
(status
字段可能具有以下值之一:'created'、'cancelled'、'kept'、'broken'...但某些值(如 'kept、broken')只能由具有特殊角色的用户更新,例如 'supervisor' ,而不是普通用户。)
我的代码
$in
不适合我的情况
can('patch', 'appointments', { user_id: user.id, status: {$in: ['created','cancelled'] });
不能解决两个问题:
- 普通用户仍然可以将约会更新为其他状态,例如“中断”;(因为约会只能由主管用户设置)
- 普通用户可以将约会从“取消”更新为“已创建”;(因为预约只能取消一次。)
vuejs3 - CASL-Vue Can 组件为授权和未授权用户隐藏组件
我有一个组件,如果用户有权限,我想显示它,但 Can 组件似乎隐藏了该组件,而不管用户权限如何。
以下是我的ability.js 模块
我将城堡添加为我的 main.js,如下所示:
以下是我需要进行权限检查的组件。
node.js - 使用 casl & vue 时的警告和错误
我正在尝试在我的 vueJS 应用程序中安装 @casl/ability 和 @casl/vue,但似乎无法使其工作。我不知道我是否做错了什么,或者与 Quasar Framework 的集成是否会破坏某些东西。
casl.js(在 quasarconf 中调用)
./服务/能力
我收到了这些警告
而控制台中的这个错误
vue.js - 如何使用数组中的 CASL 定义能力
我有带有 vuejs 前端 SPA 的 laravel 8 应用程序,每个用户都有一个具有权限的角色登录后我检索经过身份验证的用户的权限并将它们存储在 vuex 商店中。
我想从 api 返回的数组中定义能力
但我面临这个错误
我如何定义 vuex 商店的能力?我想使用这样的权限:
node.js - Nest JS 角色和基于权限的访问控制
我已经使用过 nodeJS 和 express。现在我遇到了 NestJS,发现它很有趣。
NestJS 文档中有几个对授权的引用。
- RBAC(基于角色的访问控制)
- CASL(基于声明的授权)
但我不确定众多变体中的哪一个满足我的要求。
目的是创建一个 REST API,其中一方面服务器端权限(调用路由或更改数据记录的权限)和客户端权限(哪些小部件显示在前端,用户可以看到什么)涵盖.
我自己在 NodeJS 和 express 中编写了所有内容,但在 NestJS 中,解决问题肯定比重新发明轮子更容易。
问题出现在我涵盖了所有内容的包中。
服务器端权限示例
应该保证用户有调用路由的权限,当然也应该保证,比如普通用户只能编辑自己的用户,而管理员又可以编辑一切。
客户端权限示例
来自 JWT 令牌的有效负载
JWT 令牌的有效负载包含一个数组,其中包含向用户提供的所需客户端权限。
我希望这是可以理解的,我愿意接受任何建议:)
非常感谢,亚历山德罗
casl - casl.js 将规则转换为 sql/objection 查询以进行范围界定
我试图根据能力规则限制我的查询范围,尤其是倒置规则。
使用助手,rulesToQuery
它似乎无法处理反转。至少,不像我预期的那样。在构建对象时rulesToQuery
,似乎使用rule.inverted
属性来确定$and
或$or
条件;const op = rule.inverted ? '$and' : '$or';
这感觉不对。
我用错了吗?有没有其他人解决过这个问题?
更新:
为了解决缺乏否定相等的问题,我必须更改解释器的运算符。
目前,这将在不同类型的运算符上中断,而不是eq
.
更新 2:也许,我从stalniy
's gist 偷来的例子是不正确的。实现此目的的另一种方法是使用“非”构建 CompoundCondition。
我相信这将否定整个倒置从句。
vue.js - 使用 casl 库注入能力实例
使用仅支持 vue 3 的最新版本的 casl,可以这样创建实例:
https://www.npmjs.com/package/@casl/vue
使用 vue 的先前版本的 casl 插件如何实现这一点?