I assume your prims are linked and I believe I had to so something like this for a someone to unsit someone from a stage while a performer was on it or only allow the specified performers to use the stage.
Based on looking at my code when an avatar sits on an object the avatar is treated like another linked prim. So here is a snip of the code I used.
unsitExtraAgent()
{
list linkedStuff = []; //create empty list
integer numberOfItems = llGetNumberOfPrims(); //get number of prims for this object
integer end = numberOfItems + 1;
integer i = 0; //loop counter
//loop through prims in object to get name of each prim and add to list linkedStuff
do
{
linkedStuff = linkedStuff + llGetLinkName(i);
i++;
}while (i != end);
//get key of last "prim" of object, should be our avatar
key temp = llGetLinkKey(llGetListLength(linkedStuff) - 1);
if (currentAvatar != temp) //cuyrentAvatar was a global variable for whom should be on the "stage"
{
llUnSit(temp);
llInstantMessage(temp, "Only one person can use me at a time");
}
}