Browse Source

✨ feat(lib): 增加用户信息获取和访问控制

Pchen. 8 months ago
parent
commit
899f90ad9e
2 changed files with 71 additions and 0 deletions
  1. 52 0
      lib/AccessControl.js
  2. 19 0
      lib/UserInfoCache.js

+ 52 - 0
lib/AccessControl.js

@@ -0,0 +1,52 @@
+const db = require('../plugin/DataBase/db');
+
+class AccessControl {
+    async checkSession(uuid, session) {
+        const sql = 'SELECT uuid, session FROM users WHERE uuid = ? AND session = ?';
+        const [rows] = await db.query(sql, [uuid, session]);
+        return rows.length > 0;
+    }
+
+    async getPermission(uuid) {
+        const groups = [];
+        const sql = 'SELECT admin, manage FROM users WHERE uuid = ?';
+        const [rows] = await db.query(sql, [uuid]);
+
+        if (rows.length === 0) return groups;
+
+        if (rows[0].admin === 1) groups.push('admin');
+        if (rows[0].manage === 1) groups.push('manage');
+
+        return groups;
+    }
+
+    async checkUser(maintainers) {
+        if (Array.isArray(maintainers) && maintainers.length > 0) {
+            let uuids = [];
+
+            let queries = maintainers.map(async (maintainer) => {
+                const sql = 'SELECT uuid FROM `users_permission` WHERE name = ?';
+                const [rows] = await db.query(sql, [maintainer]);
+
+                if (!rows || rows.length === 0) {
+                    throw new Error(`未找到已认证用户: ${maintainer}`);
+                }
+
+                const uuid = rows[0].uuid;
+
+                return uuid;
+            });
+
+            try {
+                uuids = await Promise.all(queries);
+            } catch (error) {
+                throw error;
+            }
+
+            return uuids;
+        }
+        return [];
+    }
+}
+
+module.exports = new AccessControl();

+ 19 - 0
lib/UserInfoCache.js

@@ -0,0 +1,19 @@
+const db = require('../plugin/DataBase/db');
+
+class UserInfoCache {
+    async getUserByUuid(uuid) {
+        const sql = 'SELECT uuid, username, avatar FROM users WHERE uuid = ?';
+        const [rows] = await db.query(sql, [uuid]);
+
+        return rows[0] ? rows[0] : null;
+    }
+
+    async getUuidByName(name) {
+        const sql = 'SELECT uuid, username, avatar FROM users WHERE name = ?';
+        const [rows] = await db.query(sql, [name]);
+
+        return rows[0] ? rows[0] : null;
+    }
+}
+
+module.exports = new UserInfoCache();