问题标签 [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 回答
285 浏览

javascript - 如何让更多用户使用 casl react 编辑文章

我使用 CASL rect 在我的 javascript 项目中设置授权。

当我不得不询问用户是否因为他是作者而有权编辑文章时,这很好。

但是当我有不止一个作者时,我如何检查当前用户是否可以编辑这篇文章?

我不明白如何检查当前用户 id 是否在 editor_ids 中的能力。

0 投票
1 回答
611 浏览

reactjs - 使用 CASL 和 graphql-shield 在 GraphQL 后端上的 RBAC 并与我的 React 前端共享规则

我正在运行 Mongoose 并使用 GraphQL (Apollo) 公开一个 API。

我想实现一个 RBAC,经过一些研究,我提出了一个使用 CASL 和 graphql-shield 的解决方案。理想情况下,我想与我的 React 前端共享规则。


第一步,在一张纸上计划。

我会首先定义我的操作:创建、读取、更新、删除。

然后我会定义我的主题:汽车、摩托车。

完成后,我将继续定义我的角色:CarSpecialist、MotoSpecialist、Admin。然后我会定义一些条件:“主题是我自己的”等。

最后,我会为每个角色分配一组能力(动作、主题、条件的组合)。


现在完成所有这些,我开始实际编写我的解决方案。

我首先在 CASL 中编写能力:动作和主题很容易定义。

条件有点棘手,我至少有两个选择:

  • 我使用“模糊”的概念,而这些概念又必须由执行它们的任何需要(后端或前端)来解释。

  • 我使用 CASL mongoose 集成插件,代价是失去与我的前端共享的能力。


有什么可供选择的输入吗?

现在一旦定义了 CASL 能力,是否由 graphql-shield 来强制执行它们?

如何在 (CASL) 操作、主题和条件与 graphql 术语之间进行映射:模式、查询、突变......?

0 投票
1 回答
82 浏览

node.js - 如何使用良好的 npm 模块在 nodejs express 服务器上执行基于角色的授权?

我正在研究在 nodejs express 服务器上进行授权的解决方案。我通过检查 ID 令牌值来检查用户是否有权访问特定访问组并查看该组名是否存在,从而获取登录用户的角色信息。我必须通过允许某些用户角色访问特定端点来根据用户角色执行授权。

可以实现这一点的最佳授权 npm 模块或技术是什么?

我已经搜索了很多,比如 casl 等,但似乎有很多方法,这只是在混淆栏上。任何帮助将不胜感激!

0 投票
1 回答
526 浏览

node.js - CASL 能力主题助手带条件

我正在测试在 express 中对 RBAC 使用“@casl/ability”。根据 CASL 文档,我应该能够针对对主题的操作定义属性的条件限制,并且在不使用类的情况下,可以使用主题辅助函数来包装 DTO。

参考:https ://casl.js.org/v4/en/guide/subject-type-detection

我尝试了下面这个非常简单的示例,它应该可以工作。但事实并非如此。我是否在某些方面理解错误?

我这里有一个沙箱https://codesandbox.io/s/casl-test-conditions-uzc8v?file=/src/index.js:0-286

0 投票
1 回答
412 浏览

vue.js - 如何在nuxt中使用casl-vue而不刷新页面

我尝试在 Nuxt 中使用casl-vue进行授权。一切都很好,但只有在刷新之后。

我使用自己的文件作为插件

我的roles档案

$auth.loggedIn在登录前检查过,它是false。我尝试在中间件中检查它,它在true那里,但它在插件中不起作用。

在登录页面中,我手动更改$auth.loggedIntrue登录后,但仍然无法正常工作。
我该如何解决这个问题?

0 投票
1 回答
150 浏览

express - 快速会话中的存储能力?

我已经看到了一个明确的例子,其中一个能力通过中间件存储在 req 对象中。然后它使用以下方法来评估权限:

我想实现类似的事情。我的想法是将能力保存在与 socket io websockets 共享的快速会话中。通过分享req.session= socket.handshake.session。我的方法如下,我从前端应用程序发出请求以获取规则以更新前端的能力。后端将能力保存在 express 会话中:

然后,当发生 websocket 请求时,我想在后端检查用户是否有权执行该操作:

但是,这会引发以下错误:

会话对象似乎具有正确的能力对象。当我 console.log socket.handshake.session.rules,我得到以下输出:

罐头功能和我尝试的所有其他方法都不起作用。我认为将普通规则存储为会话中的对象,然后在每个请求起作用之前更新能力类,但我不想这样做。我想将能力存储在会话中,这样我只需要执行 throwUnlessCan 或 can 函数。

这甚至可能吗?如果可以,你会怎么做?

感谢到目前为止。

0 投票
2 回答
625 浏览

node.js - 如何访问 CASL 条件的嵌套属性

我似乎无法使用条件规则访问嵌套对象。如果文章的评论与用户具有相同的 ID,我希望用户有权删除文章。这些只是一些编造的课程来测试......

这是我的代码:

并通过以下方式对其进行测试:

我在某处看到我需要做这样的事情: can('delete', Article, { 'comment.id': user.comment.id}) 但是当我这样做时说'对象文字可能只指定已知属性,而''comment.id''在'string []'类型中不存在

0 投票
1 回答
910 浏览

vue.js - Casl/vue $can 函数返回 false,但用户拥有该权限

我在 vue cli 项目中使用@casl/vue插件进行用户权限管理,如casl plugin author sample(vue-blog)的这个示例 repo 所示。这是我的代码
ability.js

rulesrest-api获取登录和格式化并将其保存为localStoragecasl/vue 格式{actions: 'someAction', subject: 'someSubject'}。这是
storage.js


store.js

main.js

在 Vue 组件模板中,我像这样使用它
index.vue

但它正在返回false
一些帮助非常感谢!
我是这样保存rules在此处输入图像描述

0 投票
0 回答
63 浏览

javascript - CASL 中的范围格式

我一直在研究使用CASL来授权在 VueJS 应用程序中使用范围。

我一直在寻找使用 or 的范围格式(由 Auth0 - 我的身份验证提供程序返回)action:subject并将create:users其转换为 a can()is CASL 的示例。

我认为最好的方法是将范围action:subject转换为 JSON 并将其与 CASL 一起使用。

有没有更好的(或推荐的方法)来做到这一点?

0 投票
2 回答
78 浏览

express - “accessibleFieldsPlugin”不包含虚拟字段

将 CASL 与 Express 和 Mongoose 一起使用,当我使用 时accessibleFieldsPlugin,结果中不包含虚拟字段。

这是一个错误,还是我必须采取一些解决方法才能将它们也包括在内?在这种情况下最好的办法是什么?

人物模型: