diff --git a/app/AlbumDefaultGroupPermission.php b/app/AlbumDefaultGroupPermission.php new file mode 100644 index 0000000..a7e02ab --- /dev/null +++ b/app/AlbumDefaultGroupPermission.php @@ -0,0 +1,9 @@ +authorizeAccessToAdminPanel('admin:manage-albums'); + + $addNewGroups = []; + $existingGroups = []; + foreach (Group::orderBy('name')->get() as $group) + { + if (AlbumDefaultGroupPermission::where('group_id', $group->id)->count() == 0) + { + $addNewGroups[] = $group; + } + else + { + $existingGroups[] = $group; + } + } + + $existingUsers = []; + foreach (User::orderBy('name')->get() as $user) + { + if (AlbumDefaultUserPermission::where('user_id', $user->id)->count() > 0) + { + $existingUsers[] = $user; + } + } + + return Theme::render('admin.album_default_permissions', [ + 'add_new_groups' => $addNewGroups, + 'all_permissions' => Permission::where('section', 'album')->get(), + 'existing_groups' => $existingGroups, + 'existing_users' => $existingUsers + ]); + } + public function delete($id) { $this->authorizeAccessToAdminPanel('admin:manage-albums'); diff --git a/database/migrations/2018_09_23_100536_create_album_default_group_permissions_table.php b/database/migrations/2018_09_23_100536_create_album_default_group_permissions_table.php new file mode 100644 index 0000000..d881618 --- /dev/null +++ b/database/migrations/2018_09_23_100536_create_album_default_group_permissions_table.php @@ -0,0 +1,40 @@ +unsignedInteger('group_id'); + $table->unsignedInteger('permission_id'); + + $table->foreign('group_id') + ->references('id')->on('groups') + ->onDelete('cascade'); + $table->foreign('permission_id') + ->references('id')->on('permissions') + ->onDelete('no action'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('album_default_group_permissions'); + } +} diff --git a/database/migrations/2018_09_23_100542_create_album_default_user_permissions_table.php b/database/migrations/2018_09_23_100542_create_album_default_user_permissions_table.php new file mode 100644 index 0000000..2cf4b42 --- /dev/null +++ b/database/migrations/2018_09_23_100542_create_album_default_user_permissions_table.php @@ -0,0 +1,40 @@ +unsignedInteger('user_id'); + $table->unsignedInteger('permission_id'); + + $table->foreign('user_id') + ->references('id')->on('users') + ->onDelete('cascade'); + $table->foreign('permission_id') + ->references('id')->on('permissions') + ->onDelete('no action'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('album_default_user_permissions'); + } +} diff --git a/database/migrations/2018_09_23_100608_create_album_default_anonymous_permissions_table.php b/database/migrations/2018_09_23_100608_create_album_default_anonymous_permissions_table.php new file mode 100644 index 0000000..7d1b51a --- /dev/null +++ b/database/migrations/2018_09_23_100608_create_album_default_anonymous_permissions_table.php @@ -0,0 +1,36 @@ +unsignedInteger('permission_id'); + + $table->foreign('permission_id') + ->references('id')->on('permissions') + ->onDelete('no action'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('album_default_anonymous_permissions'); + } +} diff --git a/resources/lang/en/admin.php b/resources/lang/en/admin.php index 8775ccc..a696646 100644 --- a/resources/lang/en/admin.php +++ b/resources/lang/en/admin.php @@ -81,6 +81,11 @@ return [ 'create_user_title' => 'Create a user account', 'danger_zone_heading' => 'Danger zone', 'danger_zone_intro' => 'The options below WILL cause data loss - please be careful!', + 'default_album_permissions' => [ + 'intro' => 'An album can inherit its security permissions from its parent album. Top-level albums, however, do not have a parent album, so they can be set to inherit the default permissions you set here.', + 'intro_2' => 'When you create a new album, if you choose not to inherit its permissions, the permissions you set here will be copied into tbe new album as a starting point.', + 'title' => 'Default Album Permissions' + ], 'default_storage_legend' => 'Default storage location for new albums.', 'delete_album' => 'Delete album :name', 'delete_album_confirm' => 'Are you sure you want to permanently delete this album and all its contents?', diff --git a/resources/lang/en/navigation.php b/resources/lang/en/navigation.php index ff51105..9156324 100644 --- a/resources/lang/en/navigation.php +++ b/resources/lang/en/navigation.php @@ -9,6 +9,7 @@ return [ 'create_group' => 'Create group', 'create_storage' => 'Create storage', 'create_user' => 'Create user', + 'default_album_permissions' => 'Default album permissions', 'delete_album' => 'Delete album', 'delete_group' => 'Delete group', 'delete_label' => 'Delete label', diff --git a/resources/views/themes/base/admin/album_default_permissions.blade.php b/resources/views/themes/base/admin/album_default_permissions.blade.php new file mode 100644 index 0000000..0905c7d --- /dev/null +++ b/resources/views/themes/base/admin/album_default_permissions.blade.php @@ -0,0 +1,105 @@ +@extends(Theme::viewName('layout')) +@section('title', 'Gallery Admin') + +@section('breadcrumb') + + + + +@endsection + +@section('content') +
+
+
+

@lang('admin.default_album_permissions.title')

+
+

@lang('admin.default_album_permissions.intro')

+

@lang('admin.default_album_permissions.intro_2')

+
+ +
+ {{ csrf_field() }} + + @if (count($existing_groups) > 0) +
+ @foreach ($existing_groups as $group) + @include(Theme::viewName('partials.album_permissions'), [ + 'key_id' => 'group_' . $group->id, + 'object_id' => $group->id, + 'title' => $group->name, + 'callback' => [$album, 'doesGroupHavePermission'], + 'callback_object' => $group, + 'parent_id' => 'groups-accordion' + ]) + @endforeach +
+ @endif + +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
@lang('admin.security_users_heading')
+ +
+ {{ csrf_field() }} + +
+ {{-- Anonymous users --}} + @include(Theme::viewName('partials.album_permissions'), [ + 'key_id' => 'anonymous', + 'object_id' => 'anonymous', + 'title' => trans('admin.anonymous_users'), + 'callback' => [$album, 'doesUserHavePermission'], + 'callback_object' => null, + 'parent_id' => 'users-accordion' + ]) + + @foreach ($existing_users as $user) + @include(Theme::viewName('partials.album_permissions'), [ + 'key_id' => 'user_' . $user->id, + 'object_id' => $user->id, + 'title' => $user->name, + 'callback' => [$album, 'doesUserHavePermission'], + 'callback_object' => $user, + 'parent_id' => 'users-accordion' + ]) + @endforeach +
+ +
+
+ + +
+
+ +
+
+ +
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index b1470c9..9715c63 100644 --- a/routes/web.php +++ b/routes/web.php @@ -27,6 +27,9 @@ Route::group(['prefix' => 'admin'], function () { Route::post('statistics/save', 'Admin\StatisticsController@save')->name('admin.statistics.save'); // Album management + Route::get('albums/default-permissions', 'Admin\AlbumController@defaultPermissions')->name('albums.defaultPermissions'); + Route::post('albums/set-default-group-permissions', 'Admin\AlbumController@setDefaultGroupPermissions')->name('albums.set_default_group_permissions'); + Route::post('albums/set-default-user-permissions', 'Admin\AlbumController@setDefaultUserPermissions')->name('albums.set_default_user_permissions'); Route::get('albums/{id}/analyse/{queue_token}', 'Admin\AlbumController@analyse')->name('albums.analyse'); Route::get('albums/{id}/delete', 'Admin\AlbumController@delete')->name('albums.delete'); Route::get('/albums/{id}/metadata', 'Admin\AlbumController@metadata')->name('albums.metadata');