【问题标题】:How do i make specific users for only them to have access to their own specific data in mongodb and nodejs我如何让特定用户只有他们才能访问自己在 mongodb 和 nodejs 中的特定数据
【发布时间】:2020-09-12 17:29:08
【问题描述】:

我正在做一个博客项目。我完成了创建、编辑和删除帖子的功能。我还设置并登录并注册了护照身份验证,并且已经可以将页面限制为仅登录用户。我还想将帖子的编辑和删除限制为仅创建帖子的用户。我似乎无法弄清楚这两个集合的链接方式(一个是用户集合,另一个是帖子集合)。

以下是两个集合的架构

帖子架构

const articleSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true
    },
    description: {
        type: String,
        required: true
    },
    markdown: {
        type: String,
        required: true
    },
    createdAt: {
        type: Date,
        default: Date.now
    },
    slug: {
        type: String,
        required: true,
        unique: true
    },
    sanitizedHTML: {
        type: String,
        required: true
    }
})

用户架构

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    }
});

【问题讨论】:

    标签: javascript node.js mongodb authentication


    【解决方案1】:

    在 articleSchema 中,您需要一个字段createdBy,它将与 userSchema 中的 id 链接。因此,当用户登录时,您将获得用户的 ID。通过它您可以检查帖子是否由该特定用户创建。这是目前适合您的情况的最佳方法。

    如果你想拥有更广泛的角色。例如可以编辑任何文章的编辑。有两种方法可以做到:

    如果您需要多个角色并且他们的权限是可配置的

    您需要创建具有角色名称、权限等的roleSchema。在userSchema 中将有一个名为role 的字段,它对应于每个用户的role_id。这将允许您将来通过 UI 轻松更改权限并创建新角色。

    如果你只是有几个角色并且确信它不会经常改变

    您可以自己定义这些角色是什么:例如 1 -> 编辑者、2 -> 订阅者、3 -> 管理员等。然后在 userSchema 中添加一个角色字段来放置相关角色。这将允许您对每个角色拥有固定的权限。现在,当您对文章进行任何操作时,您可以获得角色并进行相应的过滤。

    【讨论】:

    • 嘿@preshy-jones,如果对您有帮助,请接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2017-04-20
    • 2019-08-21
    • 1970-01-01
    相关资源
    最近更新 更多