diff --git a/src/middlewares/news/addNews.ts b/src/middlewares/news/addNews.ts
index 4be1fe97e8a6805c8a9059e674e63c6195dd4a9e..b0d9f0c988f1b09d7dc6c16efea5711c0f38594b 100644
--- a/src/middlewares/news/addNews.ts
+++ b/src/middlewares/news/addNews.ts
@@ -27,10 +27,11 @@ const addNews = () => async (
     });
 
     news.publishedAt = new Date();
+    news.publishedBy = req.session.user!.id!;
 
     await news.save();
 
-    res.data.newsObject = news;
+    res.data.newObjectId = news._id;
     next();
   } catch (err) {
     next(err);
diff --git a/src/middlewares/news/deleteNews.ts b/src/middlewares/news/deleteNews.ts
index 406b13381c488d42e56e855de82fc5f5a7b4b51d..e101b29c26f3e73961d3cb330909f90da7619f12 100644
--- a/src/middlewares/news/deleteNews.ts
+++ b/src/middlewares/news/deleteNews.ts
@@ -9,8 +9,7 @@ const deleteNews = () => async (
   next: NextFunction
 ) => {
   try {
-    const news = await News.findByIdAndRemove(req.params.id).lean().exec();
-    if (!news) throw new ErrorHandler(404, "News not found!");
+    const news = await News.findByIdAndRemove(req.params.newsId).lean().exec();
     next();
   } catch (err) {
     next(err);
diff --git a/src/middlewares/news/getNewsList.ts b/src/middlewares/news/getNewsList.ts
index 21b6f71e4d52d7fda3becf97b5bd32433eb4b396..7db236939e82c0ce22af35f22e5443501b2b591f 100644
--- a/src/middlewares/news/getNewsList.ts
+++ b/src/middlewares/news/getNewsList.ts
@@ -12,7 +12,7 @@ const getNewsList = () => async (
   next: NextFunction
 ) => {
   try {
-    res.data.news = await News.find();
+    res.data.news = await News.find().lean().exec();
     next();
   } catch (err) {
     next(err);
diff --git a/src/middlewares/news/getNews.ts b/src/middlewares/news/getOneNews.ts
similarity index 56%
rename from src/middlewares/news/getNews.ts
rename to src/middlewares/news/getOneNews.ts
index 2f8e60a6473aa2d2c688e65cd8b4c55196c75f8c..c2c610fd18d75e1e9f2bdba9a1dca6597e86d740 100644
--- a/src/middlewares/news/getNews.ts
+++ b/src/middlewares/news/getOneNews.ts
@@ -6,17 +6,20 @@ import News from "../../models/NewsSchema";
  * Get one News with id = req.params.id
  * and set res.data.newsObject
  */
-const getNews = () => async (
+const getOneNews = () => async (
   req: Request,
   res: Response,
   next: NextFunction
 ) => {
   try {
-    res.data.newsObject = await News.findById(req.params.id).lean().exec();
+    res.data.oneNews = await News.findById(req.params.newsId).lean().exec();
+    if (!res.data.oneNews)
+      return res.status(404).json({ message: "News not found!" });
+
     next();
   } catch (err) {
     next(err);
   }
 };
 
-export default getNews;
+export default getOneNews;
diff --git a/src/middlewares/news/responseNewsObject.ts b/src/middlewares/news/responseOneNews.ts
similarity index 54%
rename from src/middlewares/news/responseNewsObject.ts
rename to src/middlewares/news/responseOneNews.ts
index abcf8d595e0e04a29b1df9d03d3910c650ae0e95..bc7f0713018170a6a59a56fb639099f396195350 100644
--- a/src/middlewares/news/responseNewsObject.ts
+++ b/src/middlewares/news/responseOneNews.ts
@@ -3,12 +3,12 @@ import { NextFunction, Request, Response, response } from "express";
 /**
  * Return the found user from res.data.profile
  */
-const responseNewsObject = () => (req: Request, res: Response) => {
-  if (!res.data.newsObject) {
+const responseOneNews = () => (req: Request, res: Response) => {
+  if (!res.data.oneNews) {
     res.status(404).json({ message: "News not found!" });
   } else {
-    res.json(res.data.newsObject);
+    res.json(res.data.oneNews);
   }
 };
 
-export default responseNewsObject;
+export default responseOneNews;
diff --git a/src/middlewares/news/updateNews.ts b/src/middlewares/news/updateNews.ts
index 8be12bb9b85310d5818650019d513ab6b0341330..b1137de14b84b7b054b5c7e76076050611a9e6cc 100644
--- a/src/middlewares/news/updateNews.ts
+++ b/src/middlewares/news/updateNews.ts
@@ -2,7 +2,7 @@ import News, { INews } from "../../models/NewsSchema";
 import { NextFunction, Request, Response } from "express";
 
 // Valid fields to update
-const validFields = ["title", "text"];
+const validFields: Partial<keyof INews>[] = ["title", "text"];
 
 /**
  * Update a News Object
@@ -13,16 +13,20 @@ const updateNews = () => async (
   next: NextFunction
 ) => {
   try {
-    const news = await News.findById(req.params.id).exec();
+    let newFields: Partial<INews> = {};
+    validFields.forEach((field) => {
+      const value = req.body[field];
+      if (value) newFields[field] = value;
+    });
+    newFields["updatedBy"] = req.session.user?.id;
 
-    if (news) {
-      validFields.forEach((field) => {
-        const value = req.body[field];
-        if (value) news.set(field, value);
-      });
-      await news.save();
-    }
-    res.data.newsObject = news;
+    await News.updateOne(
+      { _id: req.params.newsId },
+      { $set: newFields },
+      { upsert: true, runValidators: true }
+    )
+      .lean()
+      .exec();
 
     next();
   } catch (err) {
diff --git a/src/routes/news.ts b/src/routes/news.ts
index adf199297ca337505c25e8d5372a46a30fc04bfd..df5693a1328b72255ea260a33f635539c9037928 100644
--- a/src/routes/news.ts
+++ b/src/routes/news.ts
@@ -1,18 +1,49 @@
 import { Application, Response } from "express";
 
+import addNews from "../middlewares/news/addNews";
+import createdResponse from "../middlewares/utils/createdResponse";
+import deleteNews from "../middlewares/news/deleteNews";
 import example from "../middlewares/example";
+import getNewsList from "../middlewares/news/getNewsList";
+import getOneNews from "../middlewares/news/getOneNews";
+import isRegistered from "../middlewares/auth/isRegistered";
+import isStaffOrAdmin from "../middlewares/auth/isStaffOrAdmin";
+import noContentResponse from "../middlewares/utils/noContentResponse";
+import responseNews from "../middlewares/news/responseNews";
+import responseOneNews from "../middlewares/news/responseOneNews";
+import updateNews from "../middlewares/news/updateNews";
 
 const newsRoute = (prefix: string, app: Application): void => {
   // Get all news
-  app.get(`${prefix}/`, example());
+  app.get(`${prefix}/`, getNewsList(), responseNews());
   // Add a new News
-  app.post(`${prefix}/`, example());
+  app.post(
+    `${prefix}/`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    addNews(),
+    createdResponse()
+  );
   // Get a News
-  app.get(`${prefix}/one/:newsId`, example());
+  app.get(`${prefix}/one/:newsId`, getOneNews(), responseOneNews());
   // Update a News
-  app.put(`${prefix}/one/:newsId`, example());
+  app.put(
+    `${prefix}/one/:newsId`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    getOneNews(),
+    updateNews(),
+    noContentResponse()
+  );
   // Delete a News
-  app.delete(`${prefix}/one/:newsId`, example());
+  app.delete(
+    `${prefix}/one/:newsId`,
+    isRegistered(),
+    isStaffOrAdmin(),
+    getOneNews(),
+    deleteNews(),
+    noContentResponse()
+  );
 };
 
 export default newsRoute;
diff --git a/src/utils/declarations/response.d.ts b/src/utils/declarations/response.d.ts
index 1e9abe0d3454c291e80dc4661051a83e2e76951f..c912e8d56d8e463feda26b8522740602b83c6a59 100644
--- a/src/utils/declarations/response.d.ts
+++ b/src/utils/declarations/response.d.ts
@@ -17,9 +17,9 @@ declare global {
         member?: Partial<IMember> | null;
         members?: Partial<IMember>[] | null;
         memberState?: IMember["state"] | null;
-
         news?: Partial<INews>[] | null;
-        newsObject?: Partial<INews> | null;
+        oneNews?: Partial<INews> | null;
+
         profiles?: Partial<IProfile>[] | null;
         error?: string | null;
         files?: Partial<IFile>[] | null;