diff --git a/apps/genperms/models.py b/apps/genperms/models.py index 06fc7c8b6f..51ac613f6a 100644 --- a/apps/genperms/models.py +++ b/apps/genperms/models.py @@ -21,4 +21,5 @@ class GenericPerm(models.Model): ("shutdown", "May @shutdown the site"), ("tel_anywhere", "May @teleport anywhere"), ("tel_anyone", "May @teleport anything"), + ("see_session_data", "May see detailed player session data"), ) diff --git a/apps/objects/models.py b/apps/objects/models.py index e2c5a0e3e1..6757ec9be3 100755 --- a/apps/objects/models.py +++ b/apps/objects/models.py @@ -129,6 +129,22 @@ class Object(models.Model): else: return profile[0].is_superuser + def user_has_perm(self, perm): + """ + Checks to see whether a user has the specified permission or is a super + user. + """ + if not self.is_player(): + return False + + if self.is_superuser(): + return True + + if self.get_user_account().has_perm(perm): + return True + else: + return False + def owns_other(self, other_obj): """ See if the envoked object owns another object. diff --git a/commands_general.py b/commands_general.py index 81c3cb971e..9c4e143aec 100644 --- a/commands_general.py +++ b/commands_general.py @@ -302,29 +302,46 @@ def cmd_who(cdat): session_list = session_mgr.get_session_list() session = cdat['session'] pobject = session.get_pobject() - - retval = "Player Name On For Idle Room Cmds Host\n\r" + show_session_data = pobject.user_has_perm("genperms.see_session_data") + + # Only those with the see_session_data or superuser status can see + # session details. + if show_session_data: + retval = "Player Name On For Idle Room Cmds Host\n\r" + else: + retval = "Player Name On For Idle\n\r" + for player in session_list: if not player.logged_in: continue delta_cmd = time.time() - player.cmd_last_visible delta_conn = time.time() - player.conn_time plr_pobject = player.get_pobject() - - retval += '%-16s%9s %4s%-3s#%-6d%5d%3s%-25s\r\n' % \ - (plr_pobject.get_name(show_dbref=False)[:25].ljust(27), \ - # On-time - functions_general.time_format(delta_conn,0), \ - # Idle time - functions_general.time_format(delta_cmd,1), \ - # Flags - '', \ - # Location - plr_pobject.get_location().id, \ - player.cmd_total, \ - # More flags? - '', \ - player.address[0]) + + if show_session_data: + retval += '%-16s%9s %4s%-3s#%-6d%5d%3s%-25s\r\n' % \ + (plr_pobject.get_name(show_dbref=False)[:25].ljust(27), \ + # On-time + functions_general.time_format(delta_conn,0), \ + # Idle time + functions_general.time_format(delta_cmd,1), \ + # Flags + '', \ + # Location + plr_pobject.get_location().id, \ + player.cmd_total, \ + # More flags? + '', \ + player.address[0]) + else: + retval += '%-16s%9s %4s%-3s\r\n' % \ + (plr_pobject.get_name(show_dbref=False)[:25].ljust(27), \ + # On-time + functions_general.time_format(delta_conn,0), \ + # Idle time + functions_general.time_format(delta_cmd,1), \ + # Flags + '') retval += '%d Players logged in.' % (len(session_list),) session.msg(retval)