Skip to content

Commit

Permalink
Merge pull request #35 from tuandm/feature/user-management
Browse files Browse the repository at this point in the history
Simple resource implementation in both Laravel/Vue
  • Loading branch information
tuandm authored Apr 19, 2019
2 parents edfa0a8 + 3bd37b5 commit 61b2a76
Show file tree
Hide file tree
Showing 38 changed files with 861 additions and 40 deletions.
18 changes: 5 additions & 13 deletions app/Http/Controllers/AuthController.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* File AuthController.php
*
* @author Tuan Duong <[email protected]>
* @package Laravue\Core
* @package Laravue
* @version 1.0
*/
namespace App\Http\Controllers;
Expand All @@ -13,9 +13,7 @@
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use App\Http\Controllers\Controller;

use App\Http\Resources\User as UserResource;

/**
* Class AuthController
Expand All @@ -32,7 +30,7 @@ public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if ($token = $this->guard()->attempt($credentials)) {
return response()->json(new JsonResponse(Auth::user()), Response::HTTP_OK)->header('Authorization', $token);
return response()->json(new UserResource(Auth::user()), Response::HTTP_OK)->header('Authorization', $token);
}

return response()->json(new JsonResponse([], 'login_error'), Response::HTTP_UNAUTHORIZED);
Expand All @@ -44,15 +42,9 @@ public function logout()
return response()->json((new JsonResponse())->success([]), Response::HTTP_OK);
}

public function user(Request $request)
public function user()
{
$user = User::find(Auth::user()->id);
$user->roles = [$user->role];
$user->avatar = 'http://i.pravatar.cc';
return response()->json([
'status' => 'success',
'data' => $user
]);
return new UserResource(Auth::user());
}

/**
Expand Down
85 changes: 85 additions & 0 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
<?php

namespace App\Http\Controllers;

use App\Http\Resources\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use Validator;

class UserController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return User::collection(\App\User::paginate(15));
}

/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}

/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
return new User(\App\User::find($id));
}

/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, int $id)
{
$user = \App\User::find($id);
if ($user === null) {
return response()->json(['error' => 'User not found'], 404);
}

$rules = array(
'name' => 'required',
'email' => 'required|email',
'role' => 'required|not_in:admin',
);

$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 403);
} else {
$user->name = $request->get('name');
$user->email = $request->get('email');
$user->save();
return new User($user);
}
}

/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
26 changes: 26 additions & 0 deletions app/Http/Resources/User.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class User extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'role' => $this->role,
'roles' => [$this->role],
'avatar' => 'http://i.pravatar.cc',
];
}
}
76 changes: 76 additions & 0 deletions database/seeds/UsersTableSeeder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$userList = [
"Adriana C. Ocampo Uria",
"Albert Einstein",
"Anna K. Behrensmeyer",
"Blaise Pascal",
"Caroline Herschel",
"Cecilia Payne-Gaposchkin",
"Chien-Shiung Wu",
"Dorothy Hodgkin",
"Edmond Halley",
"Edwin Powell Hubble",
"Elizabeth Blackburn",
"Enrico Fermi",
"Erwin Schroedinger",
"Flossie Wong-Staal",
"Frieda Robscheit-Robbins",
"Geraldine Seydoux",
"Gertrude B. Elion",
"Ingrid Daubechies",
"Jacqueline K. Barton",
"Jane Goodall",
"Jocelyn Bell Burnell",
"Johannes Kepler",
"Lene Vestergaard Hau",
"Lise Meitner",
"Lord Kelvin",
"Maria Mitchell",
"Marie Curie",
"Max Born",
"Max Planck",
"Melissa Franklin",
"Michael Faraday",
"Mildred S. Dresselhaus",
"Nicolaus Copernicus",
"Niels Bohr",
"Patricia S. Goldman-Rakic",
"Patty Jo Watson",
"Polly Matzinger",
"Richard Phillips Feynman",
"Rita Levi-Montalcini",
"Rosalind Franklin",
"Ruzena Bajcsy",
"Sarah Boysen",
"Shannon W. Lucid",
"Shirley Ann Jackson",
"Sir Ernest Rutherford",
"Sir Isaac Newton",
"Stephen Hawking",
"Werner Karl Heisenberg",
"Wilhelm Conrad Roentgen",
"Wolfgang Ernst Pauli",
];
foreach ($userList as $fullName) {
$name = str_replace(' ', '.', $fullName);
\App\User::create([
'name' => $fullName,
'email' => strtolower($name) . '@laravue.dev',
'password' => \Illuminate\Support\Facades\Hash::make(strtolower($name)),
'role' => \App\Laravue\Faker::randomInArray(['editor', 'user']),
]);
}
}
}
46 changes: 46 additions & 0 deletions resources/js/api/resource.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import request from '@/utils/request';

/**
* Simple RESTful resource class
*/
class Resource {
constructor(uri) {
this.uri = uri;
}
list(query) {
return request({
url: '/' + this.uri,
method: 'get',
params: query,
});
}
get(id) {
return request({
url: '/' + this.uri + '/' + id,
method: 'get',
});
}
store(resource) {
return request({
url: '/' + this.uri,
method: 'post',
params: resource,
});
}
update(id, resource) {
// return request.put('/' + this.uri + '/' + id, resource);
return request({
url: '/' + this.uri + '/' + id,
method: 'put',
data: resource,
});
}
destroy(id) {
return request({
url: '/' + this.uri + '/' + id,
method: 'delete',
});
}
}

export { Resource as default };
2 changes: 1 addition & 1 deletion resources/js/components/Pagination/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export default {
pageSizes: {
type: Array,
default() {
return [10, 20, 30, 50];
return [10, 15, 20, 30, 50];
},
},
layout: {
Expand Down
10 changes: 7 additions & 3 deletions resources/js/components/PanThumb/index.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<div :style="{zIndex:zIndex,height:height,width:width}" class="pan-item">
<div :style="{zIndex:zIndex,height:height,width:width}" :class="{'pan-item': 1, 'pan-item-hover': hoverable}">
<div class="pan-info">
<div class="pan-info-roles-container">
<slot />
Expand Down Expand Up @@ -29,6 +29,10 @@ export default {
type: String,
default: '150px',
},
hoverable: {
type: Boolean,
default: true,
},
},
};
</script>
Expand Down Expand Up @@ -129,11 +133,11 @@ export default {
background: rgba(255, 255, 255, 0.5);
}
.pan-item:hover .pan-thumb {
.pan-item-hover:hover .pan-thumb {
transform: rotate(-110deg);
}
.pan-item:hover .pan-info p a {
.pan-item-hover:hover .pan-info p a {
opacity: 1;
transform: translateX(0px) rotate(0deg);
}
Expand Down
12 changes: 8 additions & 4 deletions resources/js/components/ThemePicker/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ export default {
style.innerText = this.updateStyle(innerText, originalCluster, themeCluster);
});
this.$message({
message: '换肤成功',
message: 'Theme has been changed!',
type: 'success',
});
},
Expand Down Expand Up @@ -148,10 +148,14 @@ export default {
</script>

<style>
.theme-message,
.theme-picker-dropdown {
z-index: 99999 !important;
}
.theme-picker .el-color-picker__trigger {
margin-top: 12px;
height: 26px!important;
width: 26px!important;
height: 26px !important;
width: 26px !important;
padding: 2px;
}
Expand Down
4 changes: 4 additions & 0 deletions resources/js/filters/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,7 @@ export function numberFormatter(num, digits) {
export function toThousandFilter(num) {
return (+num || 0).toString().replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','));
}

export function uppercaseFirst(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
1 change: 1 addition & 0 deletions resources/js/icons/svg/admin.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions resources/js/icons/svg/comment.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions resources/js/icons/svg/create-user.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions resources/js/icons/svg/education.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions resources/js/icons/svg/like.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions resources/js/icons/svg/skill.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 4 additions & 1 deletion resources/js/lang/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export default {
form: 'Form',
createArticle: 'Create Article',
editArticle: 'Edit Article',
articleList: 'Article List',
articleList: 'Articles',
errorPages: 'Error Pages',
page401: '401',
page404: '404',
Expand All @@ -67,6 +67,9 @@ export default {
i18n: 'I18n',
externalLink: 'External Link',
elementUi: 'Element UI',
administrator: 'Administrator',
users: 'Users',
editUser: 'Edit User',
},
navbar: {
logOut: 'Log Out',
Expand Down
Loading

0 comments on commit 61b2a76

Please sign in to comment.