mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-01 01:36:00 -04:00
Added User managment. Fixes #5
This commit is contained in:
parent
588364a202
commit
fc50a1400d
132
app/Http/Controllers/UserController.php
Normal file
132
app/Http/Controllers/UserController.php
Normal file
@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
namespace Oxbow\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Oxbow\Http\Requests;
|
||||
use Oxbow\Http\Controllers\Controller;
|
||||
use Oxbow\User;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
|
||||
protected $user;
|
||||
|
||||
/**
|
||||
* UserController constructor.
|
||||
* @param $user
|
||||
*/
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Display a listing of the users.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$users = $this->user->all();
|
||||
return view('users/index', ['users'=> $users]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new user.
|
||||
*
|
||||
* @return Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('users/create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created user in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'name' => 'required',
|
||||
'email' => 'required|email',
|
||||
'password' => 'required|min:5',
|
||||
'password-confirm' => 'required|same:password'
|
||||
]);
|
||||
|
||||
$user = $this->user->fill($request->all());
|
||||
$user->password = Hash::make($request->get('password'));
|
||||
$user->save();
|
||||
return redirect('/users');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified user.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Response
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
$user = $this->user->findOrFail($id);
|
||||
return view('users/edit', ['user' => $user]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified user in storage.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'name' => 'required',
|
||||
'email' => 'required|email',
|
||||
'password' => 'min:5',
|
||||
'password-confirm' => 'same:password'
|
||||
]);
|
||||
|
||||
$user = $this->user->findOrFail($id);
|
||||
$user->fill($request->all());
|
||||
|
||||
if($request->has('password') && $request->get('password') != '') {
|
||||
$password = $request->get('password');
|
||||
$user->password = Hash::make($password);
|
||||
}
|
||||
$user->save();
|
||||
return redirect('/users');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the user delete page.
|
||||
* @param $id
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function delete($id)
|
||||
{
|
||||
$user = $this->user->findOrFail($id);
|
||||
return view('users/delete', ['user' => $user]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified user from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$user = $this->user->findOrFail($id);
|
||||
$user->delete();
|
||||
return redirect('/users');
|
||||
}
|
||||
}
|
@ -17,8 +17,7 @@ class Authenticate
|
||||
/**
|
||||
* Create a new filter instance.
|
||||
*
|
||||
* @param Guard $auth
|
||||
* @return void
|
||||
* @param Guard $auth
|
||||
*/
|
||||
public function __construct(Guard $auth)
|
||||
{
|
||||
|
@ -50,11 +50,24 @@ Route::group(['middleware' => 'auth'], function() {
|
||||
|
||||
Route::post('/upload/image', 'ImageController@upload');
|
||||
|
||||
// Users
|
||||
Route::get('/users', 'UserController@index');
|
||||
Route::get('/users/create', 'UserController@create');
|
||||
Route::get('/users/{id}/delete', 'UserController@delete');
|
||||
Route::post('/users/create', 'UserController@store');
|
||||
Route::get('/users/{id}', 'UserController@edit');
|
||||
Route::put('/users/{id}', 'UserController@update');
|
||||
Route::delete('/users/{id}', 'UserController@destroy');
|
||||
|
||||
// Image routes
|
||||
Route::get('/images/all', 'ImageController@getAll');
|
||||
Route::get('/images/all/{page}', 'ImageController@getAll');
|
||||
Route::get('/images/{any}', 'ImageController@getImage')->where('any', '.*');
|
||||
|
||||
// Links
|
||||
Route::get('/link/{id}', 'PageController@redirectFromLink');
|
||||
|
||||
// Search
|
||||
Route::get('/pages/search/all', 'PageController@searchAll');
|
||||
|
||||
Route::get('/', function () {
|
||||
|
@ -43,6 +43,9 @@ $button-border-radius: 3px;
|
||||
&.secondary {
|
||||
@include generate-button-colors(#EEE, $secondary);
|
||||
}
|
||||
&.muted {
|
||||
@include generate-button-colors(#EEE, #888);
|
||||
}
|
||||
}
|
||||
|
||||
.button-group {
|
||||
|
18
resources/assets/sass/_tables.scss
Normal file
18
resources/assets/sass/_tables.scss
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
table.table {
|
||||
width: 100%;
|
||||
tr {
|
||||
border-bottom: 1px solid #DDD;
|
||||
}
|
||||
th, td {
|
||||
text-align: left;
|
||||
border: none;
|
||||
padding: $-xs $-xs;
|
||||
}
|
||||
th {
|
||||
font-weight: bold;
|
||||
}
|
||||
tr:hover {
|
||||
background-color: #EEE;
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@
|
||||
@import "blocks";
|
||||
@import "buttons";
|
||||
@import "forms";
|
||||
@import "tables";
|
||||
@import "tinymce";
|
||||
|
||||
header {
|
||||
|
@ -46,6 +46,7 @@
|
||||
</div>
|
||||
<ul class="menu">
|
||||
<li><a href="/books"><i class="zmdi zmdi-book"></i>Books</a></li>
|
||||
<li><a href="/users"><i class="zmdi zmdi-accounts"></i>Users</a></li>
|
||||
<li><a href="/logout"><i class="zmdi zmdi-run zmdi-hc-flip-horizontal"></i>Logout</a></li>
|
||||
</ul>
|
||||
@if(isset($book) && !isset($books))
|
||||
|
@ -1,7 +1,7 @@
|
||||
<input type="password" id="{{ $name }}" name="{{ $name }}"
|
||||
@if($errors->has($name)) class="neg" @endif
|
||||
@if(isset($placeholder)) placeholder="{{$placeholder}}" @endif
|
||||
@if(isset($model) || old($name)) value="{{ old($name) ? old($name) : $model->$name}}" @endif>
|
||||
@if(old($name)) value="{{ old($name)}}" @endif>
|
||||
@if($errors->has($name))
|
||||
<div class="text-neg text-small">{{ $errors->first($name) }}</div>
|
||||
@endif
|
15
resources/views/users/create.blade.php
Normal file
15
resources/views/users/create.blade.php
Normal file
@ -0,0 +1,15 @@
|
||||
@extends('base')
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="page-content">
|
||||
<h1>Create User</h1>
|
||||
|
||||
<form action="/users/create" method="post">
|
||||
{!! csrf_field() !!}
|
||||
@include('users/form')
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@stop
|
22
resources/views/users/delete.blade.php
Normal file
22
resources/views/users/delete.blade.php
Normal file
@ -0,0 +1,22 @@
|
||||
@extends('base')
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="page-content">
|
||||
<h1>Delete User</h1>
|
||||
<p>This will fully delete this user with the name '<span class="text-neg">{{$user->name}}</span>' from the system.</p>
|
||||
<p class="text-neg">Are you sure you want to delete this user?</p>
|
||||
|
||||
<form action="/users/{{$user->id}}" method="POST">
|
||||
{!! csrf_field() !!}
|
||||
<input type="hidden" name="_method" value="DELETE">
|
||||
<a href="/user/{{$user->id}}" class="button muted">Cancel</a>
|
||||
<button type="submit" class="button neg">Confirm</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@stop
|
||||
|
||||
@section('bottom')
|
||||
@include('pages/image-manager')
|
||||
@stop
|
25
resources/views/users/edit.blade.php
Normal file
25
resources/views/users/edit.blade.php
Normal file
@ -0,0 +1,25 @@
|
||||
@extends('base')
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="row faded-small">
|
||||
<div class="col-md-6"></div>
|
||||
<div class="col-md-6 faded">
|
||||
<div class="action-buttons">
|
||||
<a href="/users/{{$user->id}}/delete" class="text-neg"><i class="zmdi zmdi-delete"></i>Delete User</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="page-content">
|
||||
<h1>Edit User</h1>
|
||||
|
||||
<form action="/users/{{$user->id}}" method="post">
|
||||
{!! csrf_field() !!}
|
||||
<input type="hidden" name="_method" value="put">
|
||||
@include('users/form', ['model' => $user])
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@stop
|
33
resources/views/users/form.blade.php
Normal file
33
resources/views/users/form.blade.php
Normal file
@ -0,0 +1,33 @@
|
||||
|
||||
<div class="form-group">
|
||||
<label for="name">Name</label>
|
||||
@include('form/text', ['name' => 'name'])
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="email">Email</label>
|
||||
@include('form/text', ['name' => 'email'])
|
||||
</div>
|
||||
|
||||
@if(isset($model))
|
||||
<div class="form-group">
|
||||
<span class="text-muted">
|
||||
Only fill the below if you would like <br>to change your password:
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password">Password</label>
|
||||
@include('form/password', ['name' => 'password'])
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="password-confirm">Confirm Password</label>
|
||||
@include('form/password', ['name' => 'password-confirm'])
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<a href="/users" class="button muted">Cancel</a>
|
||||
<button class="button pos" type="submit">Save</button>
|
||||
</div>
|
33
resources/views/users/index.blade.php
Normal file
33
resources/views/users/index.blade.php
Normal file
@ -0,0 +1,33 @@
|
||||
@extends('base')
|
||||
|
||||
|
||||
@section('content')
|
||||
|
||||
|
||||
<div class="row faded-small">
|
||||
<div class="col-md-6"></div>
|
||||
<div class="col-md-6 faded">
|
||||
<div class="action-buttons">
|
||||
<a href="/users/create" class="text-pos"><i class="zmdi zmdi-account-add"></i>New User</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="page-content">
|
||||
<h1>Users</h1>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Email</th>
|
||||
</tr>
|
||||
@foreach($users as $user)
|
||||
<tr>
|
||||
<td><a href="/users/{{$user->id}}">{{$user->name}}</a></td>
|
||||
<td>{{$user->email}}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@stop
|
Loading…
Reference in New Issue
Block a user