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

Merge branch 'master' of http://git.fmode.cn:3000/bin/edu-textbook

warrior 8 месяцев назад
Родитель
Сommit
dc0b4bd6d0
1 измененных файлов с 70 добавлено и 10 удалено
  1. 70 10
      server/cloud/authing/trigger-user-save.js

+ 70 - 10
server/cloud/authing/trigger-user-save.js

@@ -52,16 +52,16 @@ function appendUserACL(user){
     if(!acl) acl = new Parse.ACL();
 
     // 添加superadmin用户的可读可写权限
-    acl.setWriteAccess("superadmin", true);
-    acl.setReadAccess("superadmin", true);
+    acl.setRoleWriteAccess("superadmin", true);
+    acl.setRoleReadAccess("superadmin", true);
 
     // 添加admin用户的可读可写权限
-    acl.setWriteAccess("admin", true);
-    acl.setReadAccess("admin", true);
+    acl.setRoleWriteAccess("admin", true);
+    acl.setRoleReadAccess("admin", true);
 
     // 添加manager用户的可读可写权限
-    acl.setWriteAccess("manager", true);
-    acl.setReadAccess("manager", true);
+    acl.setRoleWriteAccess("manager", true);
+    acl.setRoleReadAccess("manager", true);
     
     // 添加公共可读权限
     acl.setPublicReadAccess(true);
@@ -73,7 +73,7 @@ function appendUserACL(user){
  * 用户删除前,删除用户从Authing
  */
  export function defineUserBeforeDelete(){
-    Parse.Cloud.beforeDelete("_User", async (request) => {
+    Parse.Cloud.afterDelete("_User", async (request) => {
         let user = request.object;
         // console.log(user.toJSON());
         // console.log(user?.get("password"))
@@ -90,7 +90,34 @@ function appendUserACL(user){
                         });
                 }
             }catch(deleteErr){}
-        });
+
+        // 直接给予删除权限
+        // if(request?.master){
+        //     return await object.destroy({useMasterKey:true})
+        // }
+        // let requestUser = request.user;
+        // if(!requestUser?.id){
+        //     throw new Parse.Error(206,"Insufficient auth.")
+        // }
+        // let query = new Parse.Query("_Role");
+        // query.equalTo("users",requestUser)
+        // let roles = await query.find({useMasterKey:true});
+
+        // let acl = request.object.getACL();
+        // if(!acl){
+        //     throw new Parse.Error(206,"Object has no ACL.")
+        // }
+        // if(acl.getWriteAccess(requestUser)){
+        //     return await request.object.destroy({useMasterKey:true})
+        // }else{
+
+        //     let hasPermission = roles.some(role=>acl.getRoleWriteAccess(role.getName()))
+        //     if(hasPermission) {
+        //         return await request.object.destroy({useMasterKey:true})
+        //     }
+        //     throw new Parse.Error(206,"Insufficient auth.")
+        // }
+    });
 }
 /**
  * 用户保存后同步数据至Authing
@@ -107,13 +134,46 @@ export function defineUserAfterSave(){
     Parse.Cloud.afterSave("Profile", async (request) => {
         // console.log("save Profile",request?.object?.id)
         let query = new Parse.Query("Profile");
+        let userPointer = request?.object?.get("user")
         query.include("user");
-        profile = await query.get(request?.object?.id);
+        console.log(userPointer)
+        profile = await query.get(request?.object?.id,{useMasterKey:true});
         syncUserProfileToAuthing(profile.get("user"),profile)
-     
+
+        appandUserToRole(profile.get("user")?.toPointer() || userPointer,profile?.get("identity"))
     });
 }
 
+// 同步Profile角色身份
+var roleNameMap = {
+    "国家级管理员":"superadmin",
+    "工作联系人":"admin",
+    "高校联系人":"manager",
+}
+async function appandUserToRole(user,roleName) {
+    console.log(user,roleName)
+    roleName = roleNameMap[roleName] || roleName
+    let id = user?.id || user?.objectId
+    if(!id || !roleName) return
+    let userObj = new Parse.User();
+    userObj.id = id;
+    let query = new Parse.Query(Parse.Role);
+    query.equalTo("name", roleName);
+    try{
+        let role = await query.first({ useMasterKey: true });
+        console.log(role?.toJSON())
+        if (role?.toJSON()?.name) {
+            let usersRelation = role.relation("users");
+            usersRelation.add(userObj);
+            await role.save(null, { useMasterKey: true });
+            let users = await usersRelation.query().find({ useMasterKey: true });
+            console.log('Users in role after addition:', users.map(u => u.toJSON()));
+        } 
+    }catch(err){
+        console.error(err)
+    }
+}
+
 /**
  * 查询用户
  * @param {*} user