diff --git a/js/src/admin/components/PermissionGrid.js b/js/src/admin/components/PermissionGrid.js index 591141389..951ed4533 100644 --- a/js/src/admin/components/PermissionGrid.js +++ b/js/src/admin/components/PermissionGrid.js @@ -110,6 +110,12 @@ export default class PermissionGrid extends Component { }) }, 90); + items.add('viewLastSeenAt', { + icon: 'far fa-clock', + label: app.translator.trans('core.admin.permissions.view_last_seen_at_label'), + permission: 'user.viewLastSeenAt', + }); + return items; } diff --git a/migrations/2018_07_21_000100_seed_default_group_permissions.php b/migrations/2018_07_21_000100_seed_default_group_permissions.php index 5a82d70fe..acdbfd604 100644 --- a/migrations/2018_07_21_000100_seed_default_group_permissions.php +++ b/migrations/2018_07_21_000100_seed_default_group_permissions.php @@ -27,6 +27,7 @@ $rows = [ ['permission' => 'discussion.hidePosts', 'group_id' => Group::MODERATOR_ID], ['permission' => 'discussion.rename', 'group_id' => Group::MODERATOR_ID], ['permission' => 'discussion.viewIpsPosts', 'group_id' => Group::MODERATOR_ID], + ['permission' => 'user.viewLastSeenAt', 'group_id' => Group::MODERATOR_ID], ]; return [ diff --git a/src/Api/Serializer/UserSerializer.php b/src/Api/Serializer/UserSerializer.php index 95792699d..d84e01d47 100644 --- a/src/Api/Serializer/UserSerializer.php +++ b/src/Api/Serializer/UserSerializer.php @@ -48,7 +48,7 @@ class UserSerializer extends BasicUserSerializer 'canDelete' => $gate->allows('delete', $user), ]; - if ($user->getPreference('discloseOnline')) { + if ($user->getPreference('discloseOnline') || $this->actor->can('viewLastSeenAt', $user)) { $attributes += [ 'lastSeenAt' => $this->formatDate($user->last_seen_at) ];