How can a shared object represent a Kiosk?

Question from Discord:

Hi Guys,
I’m new to sui chain, i’m unable to understand the concept of shared Kiosk.
As per the docs, the Kiosk can only be owned by one party.
When I do an api to call to fetch a Kisok which is a parent Object of an NFT Kiosk Item,
It stats that kiosk owner is shared.

# RPC CALL INPUT
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sui_getObject",
  "params": [
    "0x72348a59e8873af4c8f31924e91595afb8250307776c3c791d975a938065bae0",
    {
      "showType": true,
      "showOwner": true,
      "showPreviousTransaction": true,
      "showDisplay": false,
      "showContent": true,
      "showBcs": false,
      "showStorageRebate": true
    }
  ]
}

# RPC CALL OUTPUT

{
    "jsonrpc": "2.0",
    "result": {
        "data": {
            "objectId": "0x72348a59e8873af4c8f31924e91595afb8250307776c3c791d975a938065bae0",
            "version": "416951386",
            "digest": "5G5w9ca2s9m5cXQUULTBqpL8QqYnm5cx4L64nU3FEFX3",
            "type": "0x2::kiosk::Kiosk",
            "owner": {
                "Shared": {
                    "initial_shared_version": 416711813
                }
            },
            "previousTransaction": "AMjMtHsSLJgB3Ph2HaDAK2X3aHb7bTHG6c2VAU2gJfpe",
            "storageRebate": "1611200",
            "content": {
                "dataType": "moveObject",
                "type": "0x2::kiosk::Kiosk",
                "hasPublicTransfer": true,
                "fields": {
                    "allow_extensions": false,
                    "id": {
                        "id": "0x72348a59e8873af4c8f31924e91595afb8250307776c3c791d975a938065bae0"
                    },
                    "item_count": 2,
                    "owner": "0x3c7d2017c9e53854e5334ce30e3ecb0edb9ca8b2b3ef43953e663d5c34d8fc26",
                    "profits": "0"
                }
            }
        }
    },
    "id": 1
}

Hi! Indeed Kiosks are shared objects but only their owner is authorized to perform privileged operations over their assets. Think of it like an actual Kiosk, it helps if is a shared object so that other users can interact with it to purchase things the owner places on it. The way only the owner is allowed to do stuff over their assets is through a Move pattern called capability). Each Kiosk, once created, is tied to their owner via a KioskOwnerCap, Cap standing for capability, which is another object on chain that is owned. So no one can use it or pass it as a transaction argument other than their owner. You can also find the owner of the Kiosk by looking at the result.data.content.fields.owner value from the RPC call you did. You can read more about the Kiosk here. You might also find interesting these docs on Move Concepts