#4, 112: Started working on an admin screen and database structure to be able to set default album permissions for top-level albums to inherit from (and a base for new albums created without inheriting.)

This commit is contained in:
Andy Heathershaw 2018-09-23 10:28:54 +01:00
parent 84f8ad75e9
commit da0667711a
10 changed files with 285 additions and 0 deletions

View File

@ -0,0 +1,9 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class AlbumDefaultGroupPermission extends Model
{
}

View File

@ -0,0 +1,9 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class AlbumDefaultUserPermission extends Model
{
}

View File

@ -3,6 +3,8 @@
namespace App\Http\Controllers\Admin;
use App\Album;
use App\AlbumDefaultGroupPermission;
use App\AlbumDefaultUserPermission;
use App\AlbumRedirect;
use App\Facade\Theme;
use App\Facade\UserConfig;
@ -83,6 +85,41 @@ class AlbumController extends Controller
]);
}
public function defaultPermissions()
{
$this->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');

View File

@ -0,0 +1,40 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAlbumDefaultGroupPermissionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('album_default_group_permissions', function (Blueprint $table) {
$table->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');
}
}

View File

@ -0,0 +1,40 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAlbumDefaultUserPermissionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('album_default_user_permissions', function (Blueprint $table) {
$table->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');
}
}

View File

@ -0,0 +1,36 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateAlbumDefaultAnonymousPermissionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('album_default_anonymous_permissions', function (Blueprint $table) {
$table->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');
}
}

View File

@ -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?',

View File

@ -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',

View File

@ -0,0 +1,105 @@
@extends(Theme::viewName('layout'))
@section('title', 'Gallery Admin')
@section('breadcrumb')
<li class="breadcrumb-item"><a href="{{ route('home') }}"><i class="fa fa-fw fa-home"></i></a></li>
<li class="breadcrumb-item"><a href="{{ route('admin') }}">@lang('navigation.breadcrumb.admin')</a></li>
<li class="breadcrumb-item"><a href="{{ route('admin.settings') }}">@lang('navigation.breadcrumb.settings')</a></li>
<li class="breadcrumb-item active">@lang('navigation.breadcrumb.default_album_permissions')</li>
@endsection
@section('content')
<div class="container">
<div class="row">
<div class="col">
<h1>@lang('admin.default_album_permissions.title')</h1>
<div class="alert alert-info mb-4">
<p><i class="fa fa-fw fa-info"></i>@lang('admin.default_album_permissions.intro')</p>
<p class="mb-0">@lang('admin.default_album_permissions.intro_2')</p>
</div>
<form action="{{ route('albums.set_default_group_permissions') }}" method="post">
{{ csrf_field() }}
@if (count($existing_groups) > 0)
<div id="groups-accordion" role="tablist" aria-multiselectable="true">
@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
</div>
@endif
<div class="row mt-3">
<div class="col-md-4">
<select class="form-control" name="group_id" style="margin-bottom: 2px;"@if (count($add_new_groups) == 0) disabled="disabled"@endif>
@foreach ($add_new_groups as $group)
<option value="{{ $group->id }}">{{ $group->name }}</option>
@endforeach
</select>
</div>
<div class="col-md-2">
<button type="submit" name="action" value="add_group" class="btn btn-primary">Assign Permissions</button>
</div>
<div class="col-md-6 text-right">
<button type="submit" name="action" value="update_group_permissions" class="btn btn-success">
<i class="fa fa-fw fa-check"></i> @lang('forms.save_action')
</button>
</div>
</div>
</form>
<hr/>
<h5 style="font-weight: bold;">@lang('admin.security_users_heading')</h5>
<form action="{{ route('albums.set_default_user_permissions') }}" method="post">
{{ csrf_field() }}
<div id="users-accordion" role="tablist" aria-multiselectable="true">
{{-- 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
</div>
<div class="row mt-3">
<div class="col-md-4">
<input class="form-control" name="user_name" id="user-search-textbox" size="20" style="margin-bottom: 2px;" />
<input type="hidden" name="user_id" id="user-id-field" />
</div>
<div class="col-md-2">
<button type="submit" name="action" value="add_user" class="btn btn-primary">Assign Permissions</button>
</div>
<div class="col-md-6 text-right">
<button type="submit" name="action" value="update_user_permissions" class="btn btn-success">
<i class="fa fa-fw fa-check"></i> @lang('forms.save_action')
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View File

@ -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');