Hi All,
Is there a way to get the mount of user(s) of a given space within one SQL query? some of the spaces they have only users and some of them they have user plus group.
Thanks
Here is my solution in case if someone facing the same problem. Any improvement are very welcome!
This query will return a list of all spaces and relevant information...
SELECT DISTINCTc.SPACEID AS ID, s.SPACENAME AS 'Space Name', ISNULL(cus.first_name, 'UnkownUser') AS 'Admin [First Name]', ISNULL(cus.last_name, ums.username) AS 'Admin [Last Name]', ISNULL(cus.lower_email_address, 'UnkownEmail') AS 'Admin [Email]', CONVERT(varchar, s.CREATIONDATE, 104) AS 'Space Created', CONVERT(varchar, s.LASTMODDATE, 104) AS 'Space Last Update', c.TITLE AS 'Last Mod [Content]', ISNULL(cuc.first_name, 'UnkownUser') AS 'Last Mod [First Name]', ISNULL(cuc.last_name, umc.username) AS 'Last Mod [Last Name]', cuc.lower_email_address AS 'Last Mod [Email]', CONVERT(varchar, clmd.contentLastMod, 104) AS 'Last Mod [Content]', YEAR(clmd.contentLastMod) AS 'Last Mod [Year]', spuc.MemeberCount AS 'No Memeber', ISNULL(gmc.GroupMemberCount, '0') AS 'No Group Memeber'FROM dbo.CONTENT AS cLEFT JOIN dbo.SPACES AS s ON c.SPACEID = s.SPACEIDLEFT JOIN dbo.user_mapping AS ums ON s.CREATOR = ums.user_keyLEFT JOIN dbo.cwd_user AS cus ON ums.lower_username = cus.lower_user_nameLEFT JOIN dbo.user_mapping AS umc ON c.LASTMODIFIER = umc.user_keyLEFT JOIN dbo.cwd_user AS cuc ON umc.lower_username = cuc.lower_user_nameINNER JOIN (SELECT MAX(ca.LASTMODDATE) AS contentLastMod, ca.SPACEIDFROM dbo.CONTENT AS caGROUP BY ca.SPACEID) AS clmd ON c.SPACEID = clmd.SPACEID AND c.LASTMODDATE = clmd.contentLastModINNER JOIN (SELECT COUNT(spuc.PERMUSERNAME) AS MemeberCount, spuc.SPACEIDFROM (SELECT DISTINCT PERMUSERNAME, sp.SPACEIDFROM dbo.SPACEPERMISSIONS AS spWHERE sp.PERMUSERNAME IS NOT NULL) AS spucGROUP BY spuc.SPACEID) AS spuc ON c.SPACEID = spuc.SPACEIDLEFT JOIN (SELECT ccms.GroupMemberCount, sp.SPACEIDFROM dbo.cwd_group AS cgLEFT JOIN SPACEPERMISSIONS AS sp ON sp.PERMGROUPNAME = cg.group_nameLEFT JOIN (SELECT COUNT(*) AS GroupMemberCount, parent_idFROM dbo.cwd_membershipGROUP BY parent_id) AS ccms ON cg.id = ccms.parent_idWHERE cg.directory_id = <directory_id>) AS gmc ON c.SPACEID = gmc.SPACEIDWHERE s.SPACETYPE = 'global'AND s.SPACESTATUS = 'CURRENT'ORDER BY c.SPACEID;
Hi @Ramy
The following will list all the spaces that the user has been individually granted permissions:
SELECT s.SPACEKEY FROM SPACEPERMISSIONS sp JOIN SPACES s ON s.SPACEID = sp.SPACEID JOIN user_mapping um ON um.user_key = sp.PERMUSERNAME WHERE um.lower_username = '<username>' GROUP BY s.SPACEKEY ORDER BY s.SPACEKEY;
You can view the restrictions on pages assigned to the user with the following (this will show pages that grant viewing/editing to this username but limits it otherwise).
<span>SELECT</span> p<span>.</span>cp_type<span>,</span>u<span>.</span>username<span>,</span><span>c</span><span>.</span>title <span>FROM</span> content_perm p <span>JOIN</span> user_mapping u <span>ON</span> p<span>.</span>username <span>=</span> u<span>.</span>user_key <span>JOIN</span> content_perm_set s <span>ON</span> p<span>.</span>cps_id <span>=</span> s<span>.</span>id <span>JOIN</span> content <span>c</span> <span>ON</span> s<span>.</span>content_id <span>=</span> <span>c</span><span>.</span>contentid <span>WHERE</span> <span>c</span><span>.</span>contenttype <span>=</span> <span>'PAGE'</span> <span>AND</span> u<span>.</span>username <span>=</span> <span>'<user_name>'</span>
Hope it helps you!
Thanks,Manisha
Hi @Manisha Kharga _Appfire_
Thank you for you reply. But you didn't answer my question! Im looking for a SQL query, which returns me the number of user by given a space name....
Thank you anyway and cheers
Ramy
It looks like you're new here. Sign in or register to get started.