最近在用loopback,遇到一些问题,看了文档和相关的代码,有些疑惑问题,求解答。主要是控制方面的问题,看了范例的 loopback-example-access-control-master代码 1、关于role的,有个Role.registerResolver 的用法,似乎看起来是在执行中,如果Acl里面说明的principalId 定义过Role,则匹配在这里进行执行,如果返回(null, false) 则拒绝访问。作用是否就是产生临时的Role成员啊?请明确一下,如果该用户定义过role ,是否也要跳转到这里进行执行,我想应该是忽略这个处理的,不太肯定,因为范例上面这里没有写区分,请帮忙确认一下。 2、关于relations,这个应该是loopback的核心了,感觉relations 关联后,可以继承相关的方法,相当于链接了函数过程,看范例代码,似乎可以这样么做的。最主要是看了代码里面的foreignKey 有疑惑,比如A和B之间的relations A&B,和 A和C之间的relations A&C, foreignKey 的key只存在于C 的properties 内容之中,但是A&B 和A&C都用这个key作为foreignKey,这样做也可以么?难道关系可以变成 B ->A ->C 的关系么,虽然A和B的properties都没有这个key,但是可以通过C获得这个key作为foreignKey,这样做也可以么?这个和relations 的type 有关系么?请解惑。 3、文档内的Partitioning users with realms 章节只有寥寥几笔,难道仅仅是给user强制增加一个realms的?是否有其他隐含的意思,看文档说的不明确。。似乎可以定于区域,但是一笔带过。。 Loopback 是个不错的框架,仅看看代码就知道挺好的,就是文档看起来比较多,其实相对于它的功能而言还是不足,还是很多遗漏的东西,害的我还以为没有这个功能呢,最后自己测出来是有的,apidoc里面还写的简单的很,全靠看代码啊。。。。 请大神帮忙,赐教,谢谢。
可以根据数据库表生成crud的api吗?
@yakczh 这个是最基本的能力。。。。。主要是各种数据分区,权限控制的方式,我要搞定啊
其他两点不知道,第二点foreignKey取决于什么relation type,而且可以自己设定,这个章节我当初也读了很多次,可以直接写代码测试一下是不是想要的效果。
Role.registerResolver的作用是注册一个静态角色,虽然文档一笔带过,但是栗子很清楚。 举个实际点的例子,User模型和Post模型是hasMany关系,你需要在每次调用PATCH /post/:id接口时判断用户是否是post的创建者,这时候你怎么办?在远程方法前置钩子里去判断?
Role.registerResolver('author', (role, ctx, cb) => {
const userId = ctx.accessToken.userId;
if (ctx.modelName !== 'Post' || !userId) cb(null, false);
app.models.Post.findOne({ where: { userId } }, (err, post) => {
if (err) return cb(err);
cb(null, !!post);
});
});
这样我们就定义了一个author的静态角色,用于判断是否是文章的作者,怎么使用呢?当然是配合ACLs 在Post模型对应的配置文件中acls配置项中新增一条规则
{
"principalType": "ROLE",
"principalId": "author",
"permission": "ALLOW",
"property": "updateAttributes"
}
这样用户在访问和updateAttributes有关的远程方法时就会触发我们定义的静态角色对应的函数,当然,能否让用户通过只是看你返回true还是false,所以你这儿做很多事情,具体能做啥看你想象 关于relations,如果你用过rails之类的话相信难不倒你,况且我并不觉得这块的文档不详细。。。
@Amastyer 因为我没有用过rails 之类的,所以我觉得疑惑。。至于registerResolver 我看看代码,已经了解了。。。谢谢。
@Amastyer 说的不错哈,可以来群里交流交流使用心得,有兴趣不
@qxl1231 啥群