Browse Source

feat: user profile identify to role

MetaPunkGames 7 months ago
parent
commit
a2d87470dd
1 changed files with 35 additions and 8 deletions
  1. 35 8
      server/cloud/authing/trigger-user-save.js

+ 35 - 8
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);
@@ -107,13 +107,40 @@ 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角色身份
+async function appandUserToRole(user,roleName) {
+    console.log(user,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