User roles and permissions
The simplest structure would be a PERMISSIONS table like this:

create table PERMISSIONS
( Site_ID int
, User_ID int
, Role char(1)
, primary key (Site_ID, User_ID, Role) -- scenario 1
-- OR:
, primary key (Site_ID, User_ID) -- scenario 2
) 


Use values for Role such as: 


A = Administrator 
P = Publisher 
E = Editor


How many rows you need depends on how your code interprets the data.  You could have very simple code which interprets each permission strictly at face value.  To do an administrative task, the user would need an 'A' permission.  To do a publishing task, they would need a 'P' permission, etc.  In this case an administrator would need three records per site (one each of A, P, E).  Similarly publishers would need two records per site and editors only one.  There is a risk in this approach that data consistency errors could creep in, like someone could be a publisher, but not an editor (by virtue of the 'E' record being missing).

Alternatively, you could make your code more complex, in which case each user only needs one permission record per site.  In this scenario, administrative tasks require an 'A' permission, publishing requires an 'A' or a 'P' and editing requires 'A', 'P', or 'E'.  The advantage of this approach is that there is less data to maintain and you won't have inconsistencies.

Note too that you do not need to have the Users.Parent column.  If an administrator has an 'A' permission for a site, that automatically gives them control of all of the users for that site.