Mongoose - Как я могу проверить, был ли пользователь тем, кто опубликовал сообщение? - PullRequest
0 голосов
/ 30 июня 2019

Так что, в принципе, проблема в том, что я хочу выяснить, как я могу проверить, был ли пользователь тем, кто написал это сообщение, если это был пользователь, я хочу отобразить кнопку редактирования и кнопку удаления, поскольку он был тот, кто его создал, но если нет, то я не хочу, чтобы эти кнопки отображались, потому что я не хочу, чтобы пользователи, которые не создавали свои собственные сообщения, удаляли или редактировали сообщения других людей.

Пара важных кодов:

model.js

const mongoose = require("mongoose"),
    Schema = mongoose.Schema,
    bcrypt = require("bcryptjs");




const postSchema = new Schema({
    title: String,
    description: String,
    context: String,
    author: {
        type: Schema.Types.ObjectId,
    }
});


const userSchema = new Schema({
    name: {
        type: String,
        required: true
    },

    email: {
        type: String,
        required: true,
    },

    password: {
        type: String,
        required: true
    },

    posts: [postSchema]
});


userSchema.pre("save", async function save(next) {
    const user = this;
    if (!user.isModified("password")) return next();
    const hashedPassword = await bcrypt.hash(user.password, 10);
    user.password = hashedPassword;
    next();
});


const Post = mongoose.model("Post", postSchema);
const User = mongoose.model("User", userSchema);

module.exports = {
    User,
    Post
}

post.ejs

    <main class="post-detail">
        <h1><%= post.title %></h1>
        <h2><%= post.description%></h2>
        <p><%= post.context%></p>

        <% if (post.author === user) { %>
        <a href="/posts/edit-post/<%= post._id %>">Edit Post</a>
        <a href="/posts/deleted-post/<%= post._id %>">Delete Post</a>
        <% } %>
    </main>

экспортируемая функция в контроллере администратора

exports.getPost = async (req, res) => {
    try {
        const post = await Post.findById(req.params.postId);
        const user = await User.findOne({_id: req.user});

        res.render("admin/post", {
            post: post,
            pageTitle: post.title,
            path: "/posts",
            user: user
        })

    } catch (err) {
        console.log(err);
    }

}

Вот еще одна экспортированная функция, в которой я пытался получить сообщения, только если пользователь был автором этих сообщений, поскольку он перенаправляет на страницу myposts

exports.getMyPostsPage = async (req, res) => {
    const posts = await Post.find({
        author: req.user
    })

    res.render("admin/myposts", {
        path: "/myposts",
        pageTitle: "My Posts",
        posts: posts
    })
}
...