Upload All
This commit is contained in:
57
models/ResourceManager.js
Normal file
57
models/ResourceManager.js
Normal file
@ -0,0 +1,57 @@
|
||||
const User = require("./mongooseSchemas/User");
|
||||
const Painting = require("./mongooseSchemas/Painting");
|
||||
|
||||
const router = require("express").Router();
|
||||
|
||||
let sourceDir;
|
||||
|
||||
/**
|
||||
* 用於初始化的函式。
|
||||
* @param {string} sourceDirectory 被管理的資源的根目錄。
|
||||
*/
|
||||
function Initialize(sourceDirectory) {
|
||||
sourceDir = sourceDirectory;
|
||||
return router;
|
||||
}
|
||||
|
||||
/**
|
||||
* 檢查使用者是否登入。如果已登入,則進行下一步;反之,則回送403狀態碼。
|
||||
* @param {Express.Request} req Express的Request物件。
|
||||
* @param {Express.Response} res Express的Response物件。
|
||||
* @param {Function} next 導向函式。
|
||||
*/
|
||||
function CheckUserLogin(req, res, next) {
|
||||
if (req.session.passport && req.session.passport.user) {
|
||||
next();
|
||||
}
|
||||
else {
|
||||
res.state(403).send("Forbidden");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 嘗試取得指定的圖畫影像。經過登入檢查之後,還要再檢查該項圖畫是否存在或屬於使用者。
|
||||
*/
|
||||
router.get("/db/paintings/:painting_file", (req, res) => {
|
||||
let user_id = (req.session.passport && req.session.passport.user) ? req.session.passport.user : null;
|
||||
let fileName = req.params.painting_file; // 取得URL參數中的檔案名稱
|
||||
let painting_id = fileName.substr(0, fileName.length - 4); // 去掉後面的".png"
|
||||
|
||||
// 檢查使用者是否有足夠的權限訪問此畫作
|
||||
Painting.CheckViewAuthority(painting_id, user_id, (err, result) => {
|
||||
if (err) {
|
||||
res.state(500).send("Internal Server Error");
|
||||
return;
|
||||
}
|
||||
// 若權限足夠,則將圖畫檔案送至客戶端;若無則回送403。
|
||||
if (result) {
|
||||
res.status(200).sendFile(sourceDir + "/paintings/" + fileName);
|
||||
}
|
||||
else {
|
||||
res.status(403).send("Forbidden");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
module.exports = Initialize;
|
Reference in New Issue
Block a user