问题标签 [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.

0 投票
1 回答
291 浏览

vue.js - CASL Vue - 如何在路由保护中访问 $can

我正在构建一个 Nuxt 应用程序并尝试创建一个路由守卫。如何访问$can我的 Nuxt 中间件?

我在我的导入以下nuxt.config.js

casl在 Nuxt $auth 模块上添加插件:

这是因为我需要$auth.user在我的插件中访问。

所有这一切都很好,除了我找不到$abilities$can在我的 Nuxt 中间件中。


PS:我说的是这个包:@casl/vue

0 投票
0 回答
356 浏览

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组下,我该如何实现呢?

0 投票
0 回答
70 浏览

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

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

预期的

  • 普通用户只能修补他的约会。
  • 普通用户只能appointment.status从“已创建”修补到“已取消”(而不是其他值,例如“保留”)。

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

我的代码

$in不适合我的情况

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

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

vuejs3 - CASL-Vue Can 组件为授权和未授权用户隐藏组件

我有一个组件,如果用户有权限,我想显示它,但 Can 组件似乎隐藏了该组件,而不管用户权限如何。

以下是我的ability.js 模块

我将城堡添加为我的 main.js,如下所示:

以下是我需要进行权限检查的组件。

0 投票
1 回答
168 浏览

vue.js - casl - can() 在重新加载 (F5) 页面后返回 null

我正在尝试将 CASL 权限系统设置到我的 VueJS 2 项目中。一切正常,直到我故意刷新(如 F5)。即使我的用户有能力,所有 can() 都返回 false。

路由器/index.js:

canNavigate(to) 函数:

用户能力(来自 localStorage):

用户能力

路线配置:

因此,canNavigate 返回 false,并且我收到了最大调用堆栈大小超出错误但是,这是正常的,因为我的 beforeEach 路由器函数中的“无限”循环......

为什么我的 canNavigate 刷新后返回 false...?

感谢大家给我时间帮助我:)

0 投票
0 回答
292 浏览

node.js - 使用 casl & vue 时的警告和错误

我正在尝试在我的 vueJS 应用程序中安装 @casl/ability 和 @casl/vue,但似乎无法使其工作。我不知道我是否做错了什么,或者与 Quasar Framework 的集成是否会破坏某些东西。

casl.js(在 quasarconf 中调用)

./服务/能力

我收到了这些警告

而控制台中的这个错误

0 投票
0 回答
129 浏览

vue.js - 如何使用数组中的 CASL 定义能力

我有带有 vuejs 前端 SPA 的 laravel 8 应用程序,每个用户都有一个具有权限的角色登录后我检索经过身份验证的用户的权限并将它们存储在 vuex 商店中。

我想从 api 返回的数组中定义能力

但我面临这个错误

我如何定义 vuex 商店的能力?我想使用这样的权限:

0 投票
0 回答
1659 浏览

node.js - Nest JS 角色和基于权限的访问控制

我已经使用过 nodeJS 和 express。现在我遇到了 NestJS,发现它很有趣。

NestJS 文档中有几个对授权的引用。

  • RBAC(基于角色的访问控制)
  • CASL(基于声明的授权)

但我不确定众多变体中的哪一个满足我的要求。

目的是创建一个 REST API,其中一方面服务器端权限(调用路由或更改数据记录的权限)和客户端权限(哪些小部件显示在前端,用户可以看到什么)涵盖.

我自己在 NodeJS 和 express 中编写了所有内容,但在 NestJS 中,解决问题肯定比重新发明轮子更容易。

问题出现在我涵盖了所有内容的包中。

服务器端权限示例

应该保证用户有调用路由的权限,当然也应该保证,比如普通用户只能编辑自己的用户,而管理员又可以编辑一切。

客户端权限示例

来自 JWT 令牌的有效负载

JWT 令牌的有效负载包含一个数组,其中包含向用户提供的所需客户端权限。

我希望这是可以理解的,我愿意接受任何建议:)

非常感谢,亚历山德罗

0 投票
0 回答
66 浏览

casl - casl.js 将规则转换为 sql/objection 查询以进行范围界定

我试图根据能力规则限制我的查询范围,尤其是倒置规则。

使用助手,rulesToQuery它似乎无法处理反转。至少,不像我预期的那样。在构建对象时rulesToQuery,似乎使用rule.inverted属性来确定$and$or条件;const op = rule.inverted ? '$and' : '$or';这感觉不对。

我用错了吗?有没有其他人解决过这个问题?

更新:

为了解决缺乏否定相等的问题,我必须更改解释器的运算符。

目前,这将在不同类型的运算符上中断,而不是eq.

更新 2:也许,我从stalniy's gist 偷来的例子是不正确的。实现此目的的另一种方法是使用“非”构建 CompoundCondition。

我相信这将否定整个倒置从句。

0 投票
0 回答
30 浏览

vue.js - 使用 casl 库注入能力实例

使用仅支持 vue 3 的最新版本的 casl,可以这样创建实例:

https://www.npmjs.com/package/@casl/vue

使用 vue 的先前版本的 casl 插件如何实现这一点?