Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rename viewDiscussions => viewForum, viewUserList => searchUsers #2854

Merged
merged 1 commit into from
May 11, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion js/src/admin/AdminApplication.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ export default class AdminApplication extends Application {
const required = [];

if (permission === 'startDiscussion' || permission.indexOf('discussion.') === 0) {
required.push('viewDiscussions');
required.push('viewForum');
}
if (permission === 'discussion.delete') {
required.push('discussion.hide');
Expand Down
12 changes: 6 additions & 6 deletions js/src/admin/components/PermissionGrid.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,11 @@ export default class PermissionGrid extends Component {
const items = new ItemList();

items.add(
'viewDiscussions',
'viewForum',
{
icon: 'fas fa-eye',
label: app.translator.trans('core.admin.permissions.view_discussions_label'),
permission: 'viewDiscussions',
label: app.translator.trans('core.admin.permissions.view_forum_label'),
permission: 'viewForum',
allowGuest: true,
},
100
Expand All @@ -121,11 +121,11 @@ export default class PermissionGrid extends Component {
);

items.add(
'viewUserList',
'searchUsers',
{
icon: 'fas fa-users',
label: app.translator.trans('core.admin.permissions.view_user_list_label'),
permission: 'viewUserList',
label: app.translator.trans('core.admin.permissions.search_users_label'),
permission: 'searchUsers',
allowGuest: true,
},
100
Expand Down
4 changes: 2 additions & 2 deletions locale/core.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,14 +189,14 @@ core:
read_heading: Read
rename_discussions_label: Rename discussions
reply_to_discussions_label: Reply to discussions
search_users_label: Search users
sign_up_label: Sign up
start_discussions_label: Start discussions
title: Permissions
view_discussions_label: View discussions
view_forum_label: View forum (discussions and users)
view_hidden_groups_label: View hidden group badges
view_last_seen_at_label: Always view user last seen time
view_post_ips_label: View post IP addresses
view_user_list_label: View user list

# These translations are used in the dropdown menus on the Permissions page.
permissions_controls:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@

$rows = [
// Guests can view the forum
['permission' => 'viewDiscussions', 'group_id' => Group::GUEST_ID],
['permission' => 'viewForum', 'group_id' => Group::GUEST_ID],

// Members can create and reply to discussions, and view the user list
// Members can create and reply to discussions, and search users
['permission' => 'startDiscussion', 'group_id' => Group::MEMBER_ID],
['permission' => 'discussion.reply', 'group_id' => Group::MEMBER_ID],
['permission' => 'viewUserList', 'group_id' => Group::MEMBER_ID],
['permission' => 'searchUsers', 'group_id' => Group::MEMBER_ID],

// Moderators can edit + delete stuff
['permission' => 'discussion.hide', 'group_id' => Group::MODERATOR_ID],
Expand Down
36 changes: 36 additions & 0 deletions migrations/2021_05_10_000000_rename_permissions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/

use Illuminate\Database\Schema\Builder;

return [
'up' => function (Builder $schema) {
$db = $schema->getConnection();

$db->table('group_permission')
->where('permission', 'LIKE', 'viewDiscussions')
->update(['permission' => $db->raw("REPLACE(permission, 'viewDiscussions', 'viewForum')")]);

$db->table('group_permission')
->where('permission', 'LIKE', 'viewUserList')
->update(['permission' => $db->raw("REPLACE(permission, 'viewUserList', 'searchUsers')")]);
},

'down' => function (Builder $schema) {
$db = $schema->getConnection();

$db->table('group_permission')
->where('permission', 'LIKE', 'viewForum')
->update(['permission' => $db->raw("REPLACE(permission, 'viewForum', 'viewDiscussions')")]);

$db->table('group_permission')
->where('permission', 'LIKE', 'searchUsers')
->update(['permission' => $db->raw("REPLACE(permission, 'searchUsers', 'viewUserList')")]);
}
];
2 changes: 1 addition & 1 deletion src/Api/Controller/ListUsersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ protected function data(ServerRequestInterface $request, Document $document)
{
$actor = RequestUtil::getActor($request);

$actor->assertCan('viewUserList');
$actor->assertCan('searchUsers');

if (! $actor->hasPermission('user.viewLastSeenAt')) {
// If a user cannot see everyone's last online date, we prevent them from sorting by it
Expand Down
4 changes: 2 additions & 2 deletions src/Api/Serializer/ForumSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,9 @@ protected function getDefaultAttributes($model)
'footerHtml' => $this->settings->get('custom_footer'),
'allowSignUp' => (bool) $this->settings->get('allow_sign_up'),
'defaultRoute' => $this->settings->get('default_route'),
'canViewDiscussions' => $this->actor->can('viewDiscussions'),
'canViewForum' => $this->actor->can('viewForum'),
'canStartDiscussion' => $this->actor->can('startDiscussion'),
'canViewUserList' => $this->actor->can('viewUserList')
'canSearchUsers' => $this->actor->can('searchUsers')
];

if ($this->actor->can('administrate')) {
Expand Down
2 changes: 1 addition & 1 deletion src/Discussion/Access/ScopeDiscussionVisibility.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ScopeDiscussionVisibility
*/
public function __invoke(User $actor, $query)
{
if ($actor->cannot('viewDiscussions')) {
if ($actor->cannot('viewForum')) {
$query->whereRaw('FALSE');

return;
Expand Down
2 changes: 1 addition & 1 deletion src/User/Access/ScopeUserVisibility.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class ScopeUserVisibility
*/
public function __invoke(User $actor, $query)
{
if ($actor->cannot('viewDiscussions')) {
if ($actor->cannot('viewForum')) {
if ($actor->isGuest()) {
$query->whereRaw('FALSE');
} else {
Expand Down
9 changes: 9 additions & 0 deletions src/User/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -404,6 +404,15 @@ public function hasPermissionLike($match)
return false;
}

private function checkForDeprecatedPermissions($permission)
{
foreach (['viewDiscussions', 'viewUserList'] as $deprecated) {
if (strpos($permission, $deprecated) !== false) {
trigger_error('The `viewDiscussions` and `viewUserList` permissions have been renamed to `viewForum` and `searchUsers` respectively. Please use those instead.', E_USER_DEPRECATED);
}
}
}

/**
* Get the notification types that should be alerted to this user, according
* to their preferences.
Expand Down
6 changes: 3 additions & 3 deletions tests/integration/api/access_tokens/RemembererTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public function non_remember_tokens_cannot_be_used()
Carbon::setTestNow();

$data = json_decode($response->getBody(), true);
$this->assertFalse($data['data']['attributes']['canViewUserList']);
$this->assertFalse($data['data']['attributes']['canSearchUsers']);
}

/**
Expand All @@ -71,7 +71,7 @@ public function expired_tokens_cannot_be_used()
Carbon::setTestNow();

$data = json_decode($response->getBody(), true);
$this->assertFalse($data['data']['attributes']['canViewUserList']);
$this->assertFalse($data['data']['attributes']['canSearchUsers']);
}

/**
Expand All @@ -92,6 +92,6 @@ public function valid_tokens_can_be_used()
Carbon::setTestNow();

$data = json_decode($response->getBody(), true);
$this->assertTrue($data['data']['attributes']['canViewUserList']);
$this->assertTrue($data['data']['attributes']['canSearchUsers']);
}
}
8 changes: 4 additions & 4 deletions tests/integration/api/authentication/WithApiKeyTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public function cannot_authorize_without_key()
);

$data = json_decode($response->getBody()->getContents(), true);
$this->assertFalse($data['data']['attributes']['canViewUserList']);
$this->assertFalse($data['data']['attributes']['canSearchUsers']);
}

/**
Expand All @@ -60,7 +60,7 @@ public function master_token_can_authenticate_as_anyone()
);

$data = json_decode($response->getBody()->getContents(), true);
$this->assertTrue($data['data']['attributes']['canViewUserList']);
$this->assertTrue($data['data']['attributes']['canSearchUsers']);
$this->assertArrayHasKey('adminUrl', $data['data']['attributes']);

$key = ApiKey::where('key', 'mastertoken')->first();
Expand All @@ -79,7 +79,7 @@ public function personal_api_token_cannot_authenticate_as_anyone()
);

$data = json_decode($response->getBody()->getContents(), true);
$this->assertTrue($data['data']['attributes']['canViewUserList']);
$this->assertTrue($data['data']['attributes']['canSearchUsers']);
$this->assertArrayNotHasKey('adminUrl', $data['data']['attributes']);

$key = ApiKey::where('key', 'personaltoken')->first();
Expand All @@ -98,7 +98,7 @@ public function personal_api_token_authenticates_user()
);

$data = json_decode($response->getBody()->getContents(), true);
$this->assertTrue($data['data']['attributes']['canViewUserList']);
$this->assertTrue($data['data']['attributes']['canSearchUsers']);
$this->assertArrayNotHasKey('adminUrl', $data['data']['attributes']);

$key = ApiKey::where('key', 'personaltoken')->first();
Expand Down
2 changes: 1 addition & 1 deletion tests/integration/api/posts/ListTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ protected function setUp(): void

private function forbidGuestsFromSeeingForum()
{
$this->database()->table('group_permission')->where('permission', 'viewDiscussions')->where('group_id', 2)->delete();
$this->database()->table('group_permission')->where('permission', 'viewForum')->where('group_id', 2)->delete();
}

/**
Expand Down
8 changes: 4 additions & 4 deletions tests/integration/api/users/GroupSearchTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public function allows_group_filter_for_user_with_permission()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
],
]);
$response = $this->createRequest(['admin'], 2);
Expand All @@ -69,7 +69,7 @@ public function non_admin_gets_correct_results()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
],
]);

Expand Down Expand Up @@ -120,7 +120,7 @@ public function non_admin_cannot_see_hidden_groups()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
],
]);

Expand All @@ -139,7 +139,7 @@ public function non_admin_can_select_multiple_groups_but_not_hidden()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
],
]);
$this->createMultipleUsersAndGroups();
Expand Down
6 changes: 3 additions & 3 deletions tests/integration/api/users/ListTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public function shows_index_for_guest_when_they_have_permission()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
],
]);

Expand Down Expand Up @@ -98,7 +98,7 @@ public function allows_last_seen_sorting_with_permission()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
['permission' => 'user.viewLastSeenAt', 'group_id' => 2],
],
]);
Expand All @@ -120,7 +120,7 @@ public function disallows_last_seen_sorting_without_permission()
{
$this->prepareDatabase([
'group_permission' => [
['permission' => 'viewUserList', 'group_id' => 2],
['permission' => 'searchUsers', 'group_id' => 2],
],
]);

Expand Down
4 changes: 2 additions & 2 deletions tests/integration/api/users/ShowTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ protected function setUp(): void

private function forbidGuestsFromSeeingForum()
{
$this->database()->table('group_permission')->where('permission', 'viewDiscussions')->where('group_id', 2)->delete();
$this->database()->table('group_permission')->where('permission', 'viewForum')->where('group_id', 2)->delete();
}

private function forbidMembersFromSearchingUsers()
{
$this->database()->table('group_permission')->where('permission', 'viewUserList')->where('group_id', 3)->delete();
$this->database()->table('group_permission')->where('permission', 'searchUsers')->where('group_id', 3)->delete();
}

/**
Expand Down
6 changes: 3 additions & 3 deletions tests/integration/extenders/UserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public function user_has_permissions_for_expected_groups_if_no_processors_added(

$user = User::find(2);

$this->assertContains('viewUserList', $user->getPermissions());
$this->assertContains('searchUsers', $user->getPermissions());
}

/**
Expand All @@ -100,7 +100,7 @@ public function processor_can_restrict_user_groups()

$user = User::find(2);

$this->assertNotContains('viewUserList', $user->getPermissions());
$this->assertNotContains('searchUsers', $user->getPermissions());
}

/**
Expand All @@ -114,7 +114,7 @@ public function processor_can_be_invokable_class()

$user = User::find(2);

$this->assertNotContains('viewUserList', $user->getPermissions());
$this->assertNotContains('searchUsers', $user->getPermissions());
}

/**
Expand Down