I am making a game, and there is a SurfaceGUI that everyone can see, and when a button is clicked, it brings up a picture. How can I see what player clicked the button? (So I can set permissions, I only want certain people to be able to click and have it actually do something)
I looked around, and saw something about it needing to be in PlayerGUI, which I'm not sure how that would work..
As you've already said yourself, and as the Wiki states, in order for you to check who clicked a button on a SurfaceGui, the SurfaceGui itself needs to be in the player's PlayerGui. By doing this, you can get the player by parenting up from the script inside the PlayerGui.
An alternative to this is to place a LocalScript in every player's PlayerGui (StarterGui) which connects the Button1Down event with the SurfaceGui's button in Workspace - This should work as required, though I'd still just go with the first option. You would, again, get the player by getting the LocalPlayer or parenting up to the player.