问题标签 [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.
node.js - 一起使用 @casl/mongoose 和 mongoose-paginate-v2
我正在尝试在我的应用程序中使用@casl/mongoose 和 mongoose - paginate-v2express.js
,但问题是必须在model
对象上使用两个库。
在这两种方式中,我都得到了accessibleBy
/paginate
不是一个函数,因为正如我所说的,两个库都必须在模型(在我的情况下Person
)对象上使用。
非常感谢任何帮助或建议。
reactjs - 具有 React Casl 权限和后端 api laravel spatie 权限的前端
我是新手,我正在使用一个身份验证示例,该示例使用 casl/ability 控制用户权限。在示例中,展示了 JWT 中的身份验证,它读取以下 JSON 结构:
我在 Laravel 中创建 bakcend,但 API 身份验证返回如下:
如何让我的 API 已经返回简化身份验证,将“权限”更改为“能力”并包含必要的字段。注意:我在 Laravel 中使用 spatie/permissions
mongoose - NestJS + CASL + Mongoose:CASL 无法从 Mongoose Schema 推断主题类型
语境
我已经Cat
使用 Mongoose 和 NestJS 定义了一个模式:
我还定义了一个使用 CASL 处理我的 API 授权的能力工厂:
问题
当我尝试检查我的服务中的权限时(注意:用户不是管理员):
ability.can(Action.Update, cat)
总是返回false
,而它应该是true
。
附加信息
ability.can
false
当用户不是管理员时返回任何操作。
我的猜测是 CASL 无法使用能力构建器接口中的Cat
类来推断我的 Mongoose 模型的主题类型。InferSubject
但我不知道使用哪个类来正确推断主题类型。
我错过了什么?
javascript - React 应用程序“可以”条件中的 CASL 授权无效
我正在尝试在反应应用程序中实现 CASL 授权,我认为我对如何实现它不太了解。
标准的 Can 组件似乎可以与基本的 CRUD 操作一起使用,但我无法获得产生任何效果的条件。我想我错过了一些东西。
我目前的理论是我需要使用 TypeScript 而不是普通的 Javascript 才能使整个工作正常进行。我目前不知道任何 TypeScript,我真的很想推进我的应用程序,而不必学习另一种语言。如果必须的话,我会学习 TypeScript,但我需要知道它是否值得去做。以下是我迄今为止构建的内容的简化版本。
预期行为
我希望应用程序显示此人可以阅读和创建事物记录。他们还应该能够更新或删除特定的 Apple 记录。
预期输出:
我可以查看事物
我可以创建事物
我可以更新这个苹果
我可以删除这个苹果
实际行为
它忽略与条件有关的任何内容,并允许对所有内容进行创建、读取、更新和删除。
实际输出:
我可以查看事物
我可以创建事物
我可以更新任何事物
我可以删除任何事物
主应用
能力上下文组件 用于构建能力上下文并封装能力的生成
Can组件在这里生成
最后一个组件可能会使用对“事物”的授权
javascript - 如果主题没有规则,则 CASL 行为
如果在CASL中未为给定主题提供任何规则,则检查该主题的能力始终返回 false。
例如
是否有可能改变这种行为,使true
没有任何规则的对象恢复能力?
在我的用例中,我有大量的主题,并且可以动态添加新主题。{ action: "manage", subject: "NewSubject"}
每当添加新主题时,总是必须添加是很困难的。我宁愿只为实际受到限制的主题添加规则。
javascript - Casl Prisma 可以用 vanilla Javascript 编写还是需要 Typescript?
CASL 对 TypeScript 有完善的支持
但是你可以使用纯 Javascript。我想知道@casl/prisma包是否也是如此。给出的示例似乎使用 Typescript ( type AppAbility
...)
和文档说...
TypeScript 支持:该包是用 TypeScript 编写的...
但这听起来像是对 TypeScript 的支持,但如果你愿意,你可以使用 vanilla Javascript。
javascript - 您可以根据用户属性定义 Casl 规则吗?
在 CASL 中定义规则时,您可以根据主题的属性来说明用户对哪个主题(模型)的能力。
在以下来自文档的示例中,您定义用户可以阅读文章,如果它的“属性”published
是false
。
我想知道我是否还可以在条件中添加用户属性,例如,如果published === false && user.is_active === true
.
下面文档中的示例显示了在定义规则之前使用 if 语句完成此操作(显然不是 CASL 的功能,只是标准的 javascript 条件)。
这可以在can
函数调用中以某种方式在规则上完成,比如传递的参数吗?
CASL 声明...
CASL 实现基于属性的访问控制
javascript - 使用 acl 创建反应应用程序,得到 casl react t.on 错误
我刚刚开始使用 casl,似乎我必须遗漏一些东西。我创建了一个名为的文件can.js
,它与文档中的示例完全相同:
在我App.tsx
使用
然后在里面Main.ts
我定义了一些这样的路线:
当您单击受限路线时,应用程序会引发错误:
我错过了一些明显的东西吗?
typescript - 为什么我的 CASL 能力在使用从 knex 返回的主题时不起作用?
我正在尝试将 CASL 与 NestJS 和 Knex 一起使用。我想限制用户只更新和删除他们自己的类别。但是,该能力似乎对我不起作用。
我使用这个类来创造能力:
在服务内部,我使用 knex 查询一个类别,然后尝试检查该类别的能力,但是当第一个if
评估为false
第二个if
语句时,总是评估为true
,因此抛出异常。
我试图检查从 knex 返回的类型,使用category instanceof Category
. 这评估为假,所以我猜ability.can(Action.Update, category)
它不起作用,因为category
它不是 class 的实例Category
。如果我尝试使用类构造函数创建一个新类别,它工作正常。
authorization - 在 NestJS 守卫中使用 CASL
在这部分文档中,并非所有使用警卫的用例都解释清楚:
NestJS Docs - 基于声明的授权
CaslAbilityFactory 为这些用例实现:
- 管理员可以管理(创建/读取/更新/删除)所有实体
- 用户对所有内容都有只读访问权限
- 用户可以更新他们的文章(article.authorId === userId)
- 已发布的文章无法删除(article.isPublished === true)
并且只解释了最琐碎的用例:
用户对所有内容都有只读访问权限
使用此控制器方法进行了演示:
但是我应该如何注释检查第三个或第四个用例的方法:
已发表的文章无法删除:
(article.isPublished === true)
有可能吗?对于此要求,@checkPolicies 中声明的 PoliciesGuard 或处理程序应该能够访问方法参数。
如何从守卫访问控制器方法参数?
如果您直接从控制器方法调用 ability.can(...) ,当然是一种解决方法:
但是这个解决方案不符合原来的声明模式。