How do I check if a player has developer access (using a script)?

Hello all,

I’ve been planning to make a custom leaderboard/PlayerList system that is basically identical to the current roblox one (but with a few behind the scenes differences), I know how to check if a player is an admin or a star creator because that’s just checking if they are in group, but the issue comes when checking if a player has developer access to a game. Of course it’s easy enough if it’s a group game and that’s managed on a role/rank system (to check if they’re rank is above 200, for example), but when it comes to player-owned games the only way I can find tutorials on is having a custom table/module with playerIds listed which is all manual, I’m looking for a way to check if the player can edit in studio, give them a boolValue in their player that will indicate that they are a dev without the need to edit a list each time a dev comes and goes from the project.

How have I tried to solve this so far then? I have done a massive dive into the Roblox CoreScripts and have found various different things, but I’m not going to lie, most of that code is beyond my understanding. The Playerlist scripts seem to be referencing icons that I haven’t seen used in a while so either the ones on the github are outdated or it’s some sort of backwards compatibility.
My next thought was “How does the DevConsole know who can enter commands and view the server output?” So once again I went searching through the core scripts and found a function called isDeveloper() so after messing around in studio with the code (mainly adding print statements) I figure out that one of the services it uses is locked to coreScripts…

local HttpRbxApiService = game:GetService('HttpRbxApiService')
local HttpService = game:GetService('HttpService')

local function isDeveloper(player:Player)
	local canManageSuccess, canManageResult = pcall(function()
		local url = string.format("/users/%d/canmanage/%d", player.UserId, game.PlaceId)
		return HttpRbxApiService:GetAsync(url, Enum.ThrottlingPriority.Default, Enum.HttpRequestType.Default, true), "Checker1"
	end)
	print(canManageSuccess, canManageResult)
	if canManageSuccess and type(canManageResult) == "string" then
		-- API returns: {"Success":BOOLEAN,"CanManage":BOOLEAN}
		-- Convert from JSON to a table
		-- pcall in case of invalid JSON
		local success, result = pcall(function()
			return HttpService:JSONDecode(canManageResult), "Checker2"
		end)
		print(success, result)
		if success and result.CanManage == true then
			return true, "Checker3"
		end
	end
	return false , "Checker4"
end

local result, a = isDeveloper(game.Players.IncredibleTeamAidan)

print(result, a)

Unfortunately the output is always:

-->false The current thread cannot call 'GetAsync' (lacking capability RobloxScript)
-->false Checker4

So… What’s the next step? One thing I see a lot of on the DevForum is that I should use a proxy to access the roblox API but I can only see ones for the standard HttpService and not the specialised HttpRbxApiService which this function requires.

I’m kinda at a loss so any help would be appreciated.

Thanks in advance, Aidan.

HttpRbxApiService is an internal API service only used by core scripts and not meant to be used by game developers(unfortunately). However we have HttpService that can make requests to any site except of roblox.com. To make a request to a roblox API you need to proxy the request(so it goes to another server that contacts roblox.com for you) a popular free proxy you can use is roproxy.com(basically you replace the roblox.com part of the url with that).

Also you must pass the whole url inside the GetAsync function not just the part after the website domain.

Here’s the url i found from some posts in the forum. develop.roblox.com/v1/user/UserId/canmanage/PlaceId, replace the UserId and PlaceId though. If you wanna use roproxy do develop.roproxy.com/v1/user/UserId/canmanage/PlaceId, By the way add https:// at the start of the url.

I can’t seem to get this to work, is there no way of doing this without a proxy? (I don’t fully trust proxies)

I think proxies are the only way, or use the built in members of services, i could make a function to get can manage if you need it. [Using no proxies.]

If there was a function of a service that could work that would be useful, but I can’t find anything. Not saying it doesn’t exist, just saying I must have missed it if it did.

Here’s a module i made to do it.
CanManage.rbxmx (1.7 KB)

unfortunately that only works for the owner of games, and not any developer. but thanks for trying.

Unfortunately, this API has since been deprecated and removed; and replaced by one which needs the cookie of the user being requested.

Source: Official List of Deprecated Web Endpoints - #63 by jinkiesSc00b

idk why you mind this solution with player list? it’s the safest one and the best one for you, as you have total control over it, and if someone changed it you can kick this person out of dev team, why overcomplicate stuff?