mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-11-04 11:34:04 +00:00 
			
		
		
		
	Start to determine post access level
This commit is contained in:
		@@ -1,7 +1,7 @@
 | 
				
			|||||||
import { RequestHandler } from "../entities/RequestHandler";
 | 
					import { RequestHandler } from "../entities/RequestHandler";
 | 
				
			||||||
import { UserHelper } from "../helpers/UserHelper";
 | 
					import { UserHelper } from "../helpers/UserHelper";
 | 
				
			||||||
import { PostsHelper } from "../helpers/PostsHelper";
 | 
					import { PostsHelper } from "../helpers/PostsHelper";
 | 
				
			||||||
import { Post, PostVisibilityLevel, PostKind } from "../entities/Post";
 | 
					import { Post, PostVisibilityLevel, PostKind, PostAccessLevel } from "../entities/Post";
 | 
				
			||||||
import { MoviesController } from "./MoviesController";
 | 
					import { MoviesController } from "./MoviesController";
 | 
				
			||||||
import { MoviesHelper } from "../helpers/MoviesHelper";
 | 
					import { MoviesHelper } from "../helpers/MoviesHelper";
 | 
				
			||||||
import { SurveyHelper } from "../helpers/SurveyHelper";
 | 
					import { SurveyHelper } from "../helpers/SurveyHelper";
 | 
				
			||||||
@@ -20,6 +20,14 @@ VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_FRIENDS] = "friends";
 | 
				
			|||||||
VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_USER] = "private";
 | 
					VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_USER] = "private";
 | 
				
			||||||
VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_GROUP_MEMBERS] = "members";
 | 
					VISIBILITY_LEVELS_API[PostVisibilityLevel.VISIBILITY_GROUP_MEMBERS] = "members";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const ACCESS_LEVELS_API = {};
 | 
				
			||||||
 | 
					ACCESS_LEVELS_API[PostAccessLevel.NO_ACCESS] = "no-access";
 | 
				
			||||||
 | 
					ACCESS_LEVELS_API[PostAccessLevel.BASIC_ACCESS] = "basic";
 | 
				
			||||||
 | 
					ACCESS_LEVELS_API[PostAccessLevel.INTERMEDIATE_ACCESS] = "intermediate";
 | 
				
			||||||
 | 
					ACCESS_LEVELS_API[PostAccessLevel.FULL_ACCESS] = "full";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class PostsController {
 | 
					export class PostsController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
@@ -93,6 +101,11 @@ export class PostsController {
 | 
				
			|||||||
			// Likes information
 | 
								// Likes information
 | 
				
			||||||
			likes: await LikesHelper.Count(p.id, LikesType.POST),
 | 
								likes: await LikesHelper.Count(p.id, LikesType.POST),
 | 
				
			||||||
			userlike: h.signedIn ? await LikesHelper.IsLiking(h.getUserId(), p.id, LikesType.POST) : false,
 | 
								userlike: h.signedIn ? await LikesHelper.IsLiking(h.getUserId(), p.id, LikesType.POST) : false,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Determine user access level
 | 
				
			||||||
 | 
								user_access: ACCESS_LEVELS_API[await PostsHelper.GetAccessLevel(h.optionnalUserID, p)],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// TODO : add comments
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		return data;
 | 
							return data;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
import { PostKind, PostVisibilityLevel, Post, PostPageKind, PostFile, PostLink } from "../entities/Post";
 | 
					import { PostKind, PostVisibilityLevel, Post, PostPageKind, PostFile, PostLink, PostAccessLevel } from "../entities/Post";
 | 
				
			||||||
import { FriendsHelper } from "./FriendsHelper";
 | 
					import { FriendsHelper } from "./FriendsHelper";
 | 
				
			||||||
import { DatabaseHelper } from "./DatabaseHelper";
 | 
					import { DatabaseHelper } from "./DatabaseHelper";
 | 
				
			||||||
 | 
					import { UserHelper } from "./UserHelper";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Posts helper
 | 
					 * Posts helper
 | 
				
			||||||
@@ -105,6 +106,61 @@ export class PostsHelper {
 | 
				
			|||||||
		return entries.map((r) => this.DBToPost(r));
 | 
							return entries.map((r) => this.DBToPost(r));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Get the access level of a user over a post
 | 
				
			||||||
 | 
						 * 
 | 
				
			||||||
 | 
						 * @param userID Target user ID
 | 
				
			||||||
 | 
						 * @param post Target post
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						public static async GetAccessLevel(userID: number, post: Post) : Promise<PostAccessLevel> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// User is the owner of the post
 | 
				
			||||||
 | 
							if(userID == post.userID)
 | 
				
			||||||
 | 
								return PostAccessLevel.FULL_ACCESS;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// User page
 | 
				
			||||||
 | 
							if(post.kindPage == PostPageKind.PAGE_KIND_USER) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Post made on user page
 | 
				
			||||||
 | 
								if(post.pageID == userID)
 | 
				
			||||||
 | 
									return PostAccessLevel.INTERMEDIATE_ACCESS;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// Check if the post is private
 | 
				
			||||||
 | 
								if(post.visibilityLevel == PostVisibilityLevel.VISIBILITY_USER)
 | 
				
			||||||
 | 
									return PostAccessLevel.NO_ACCESS;
 | 
				
			||||||
 | 
								
 | 
				
			||||||
 | 
								// In case the post is only for friends
 | 
				
			||||||
 | 
								else if(post.visibilityLevel == PostVisibilityLevel.VISIBILITY_FRIENDS) {
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									if(userID < 1 /* user not signed in */
 | 
				
			||||||
 | 
										|| !await FriendsHelper.AreFriend(userID, post.pageID) /* not a friend */)
 | 
				
			||||||
 | 
										return PostAccessLevel.NO_ACCESS;
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										return PostAccessLevel.BASIC_ACCESS;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// In case of public post
 | 
				
			||||||
 | 
								else if(post.visibilityLevel == PostVisibilityLevel.VISIBILITY_PUBLIC) {
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									// Check if the user can see the page
 | 
				
			||||||
 | 
									if(await UserHelper.CanSeeUserPage(userID, post.userPageID))
 | 
				
			||||||
 | 
										return PostAccessLevel.BASIC_ACCESS;
 | 
				
			||||||
 | 
									
 | 
				
			||||||
 | 
									// Else no access to the user
 | 
				
			||||||
 | 
									return PostAccessLevel.NO_ACCESS;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Group page
 | 
				
			||||||
 | 
							else if(post.kindPage == PostPageKind.PAGE_KIND_GROUP) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							throw Error("GetAccessLevel reached an unimplemented status!");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Turn a database entry into a row object
 | 
						 * Turn a database entry into a row object
 | 
				
			||||||
	 * 
 | 
						 * 
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user