Просмотр исходного кода

Merge pull request #2025 from overleaf/ta-metrics-admin

Admin Metrics

GitOrigin-RevId: 1179893b9b2148110b86caca12b057fccb04f3af
Timothée Alby 7 лет назад
Родитель
Сommit
7d1bab4e88

+ 21 - 0
services/web/app/src/Features/UserMembership/UserMembershipAuthorization.js

@@ -122,6 +122,18 @@ module.exports = UserMembershipAuthorization = {
     )
   },
 
+  requireAdminMetricsStaffAccess(req, res, next) {
+    return requireAccessToEntity(
+      'admin',
+      'admin',
+      req,
+      res,
+      next,
+      'adminMetrics',
+      true
+    )
+  },
+
   requireTemplateMetricsAccess(req, res, next) {
     const templateId = req.params.id
     return request(
@@ -202,6 +214,12 @@ module.exports = UserMembershipAuthorization = {
         res,
         next
       )
+    } else if (req.query.resource_type === 'admin') {
+      return UserMembershipAuthorization.requireAdminMetricsStaffAccess(
+        req,
+        res,
+        next
+      )
     }
     return requireAccessToEntity(
       req.query.resource_type,
@@ -294,6 +312,9 @@ var getEntity = function(
   if (!entityConfig) {
     return callback(new Errors.NotFoundError(`No such entity: ${entityName}`))
   }
+  if (!entityConfig.modelName) {
+    return callback(null, { id: entityName }, entityConfig, true)
+  }
 
   return UserMembershipHandler.getEntity(
     entityId,

+ 5 - 0
services/web/app/src/Features/UserMembership/UserMembershipEntityConfigs.js

@@ -127,5 +127,10 @@ module.exports = {
       primaryKey: 'slug',
       access: 'managerIds'
     }
+  },
+
+  admin: {
+    // for metrics only
+    modelName: null
   }
 }

+ 1 - 1
services/web/app/src/Features/UserMembership/UserMembershipsHandler.js

@@ -28,7 +28,7 @@ module.exports = UserMembershipsHandler = {
     const entityConfigs = []
     for (let key in UserMembershipEntityConfigs) {
       const entityConfig = UserMembershipEntityConfigs[key]
-      if (entityConfig.fields.write != null) {
+      if (entityConfig.fields && entityConfig.fields.write != null) {
         entityConfigs.push(entityConfig)
       }
     }

+ 2 - 1
services/web/app/src/models/User.js

@@ -42,7 +42,8 @@ const UserSchema = new Schema({
     institutionMetrics: { type: Boolean, default: false },
     institutionManagement: { type: Boolean, default: false },
     groupMetrics: { type: Boolean, default: false },
-    groupManagement: { type: Boolean, default: false }
+    groupManagement: { type: Boolean, default: false },
+    adminMetrics: { type: Boolean, default: false }
   },
   signUpDate: {
     type: Date,