How to handle data on the server and client?

Hello!
I have made a spell system which is all handled on the client but now I need help moving some of it to the server. For example we have a water move. The controller is made on the client and then handled via remote events; client input which makes hitbox → server. So now to prevent exploiters I want the server to validate if the client actually owns this spell. But the problem is that this move controller is solely handled on the client and im not sure on what to do.

Im just looking for a couple ideas on how I could continue structuring my framework or if i need to completely change my approach, anything would be helpful at this point.

example:

local Water = {}
Water.__index = Water

function Water.new()
    local self = {}
    self.cd = 10
    self.dmg = 100
    self:init()
end)

function self:activate()
--create hitbox and fire server
end)

function Water:init()
    UIS.InputBegan:Connect(function(input)
        if input.Keycode ~= Enum.Keycode.Q then
             return
        end

        self:activate
    end)
end)

The .new function would be called from a separate local script which is where my problem arises

what is the purpose of activating when any input began?

I wrote this from memory and forgot to put the other code in, should be fixed now

I would use ContextActionService instead, you could do some checks on the server using tables, attributes, etc

Except the server has no idea about this and im trying to figure out how i could implement the server into this

The Activate function fires something to the server so you could use that, alternatively you could have the new function fire something to the server and the server could accept or reject it (RemoteFunction)