Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 78a5494

Browse files
Finish user edit, update, index, and destroy actions
1 parent 79ea98a commit 78a5494

File tree

16 files changed

+284
-9
lines changed

16 files changed

+284
-9
lines changed

‎app/Http/Controllers/SessionsController.php‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111

1212
class SessionsController extends Controller
1313
{
14+
public function __construct()
15+
{
16+
$this->middleware('guest', [
17+
'only' => ['create']
18+
]);
19+
}
20+
1421
public function create()
1522
{
1623
return view('sessions.create');
@@ -24,13 +31,13 @@ public function store(Request $request)
2431
]);
2532

2633
$credentials = [
27-
'email' => $request->email,
28-
'password' => $request->password,
34+
'email' => $request->input('email'),
35+
'password' => $request->input('password'),
2936
];
3037

3138
if (Auth::attempt($credentials, $request->has('remember'))) {
3239
session()->flash('success', '欢迎回来!');
33-
return redirect()->route('users.show', [Auth::user()]);
40+
return redirect()->intended(route('users.show', [Auth::user()]));
3441
} else {
3542
session()->flash('danger', '很抱歉,您的邮箱和密码不匹配');
3643
return redirect()->back();

‎app/Http/Controllers/UsersController.php‎

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@
1313

1414
class UsersController extends Controller
1515
{
16+
public function __construct()
17+
{
18+
$this->middleware('auth', [
19+
'only' => ['edit', 'update', 'destroy']
20+
]);
21+
22+
$this->middleware('guest', [
23+
'only' => ['create']
24+
]);
25+
}
26+
27+
public function index()
28+
{
29+
$users = User::paginate(30);
30+
return view('users.index', compact('users'));
31+
}
32+
1633
public function create()
1734
{
1835
return view('users.create');
@@ -42,4 +59,41 @@ public function store(Request $request)
4259
session()->flash('success', '欢迎,您将在这里开启一段新的旅程~');
4360
return redirect()->route('users.show', [$user]);
4461
}
62+
63+
public function edit($id)
64+
{
65+
$user = User::findOrFail($id);
66+
$this->authorize('update', $user);
67+
return view('users.edit', compact('user'));
68+
}
69+
70+
public function update($id, Request $request)
71+
{
72+
$this->validate($request, [
73+
'name' => 'required|max:50',
74+
'password' => 'confirmed|min:6'
75+
]);
76+
77+
$user = User::findOrFail($id);
78+
$this->authorize('update', $user);
79+
80+
$data = array_filter([
81+
'name' => $request->name,
82+
'password' => $request->password,
83+
]);
84+
$user->update($data);
85+
86+
session()->flash('success', '个人资料更新成功!');
87+
88+
return redirect()->route('users.show', $id);
89+
}
90+
91+
public function destroy($id)
92+
{
93+
$user = User::findOrFail($id);
94+
$this->authorize('destroy', $user);
95+
$user->delete();
96+
session()->flash('success', '成功删除用户!');
97+
return back();
98+
}
4599
}

‎app/Http/Middleware/Authenticate.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public function handle($request, Closure $next)
3838
if ($request->ajax()) {
3939
return response('Unauthorized.', 401);
4040
} else {
41-
return redirect()->guest('auth/login');
41+
return redirect()->guest('login');
4242
}
4343
}
4444

‎app/Policies/UserPolicy.php‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Policies;
4+
5+
use Illuminate\Auth\Access\HandlesAuthorization;
6+
use App\Models\User;
7+
8+
class UserPolicy
9+
{
10+
use HandlesAuthorization;
11+
12+
public function update(User $currentUser, User $user)
13+
{
14+
return $currentUser->id === $user->id;
15+
}
16+
17+
public function destroy(User $currentUser, User $user)
18+
{
19+
return $currentUser->is_admin && $currentUser->id !== $user->id;
20+
}
21+
}

‎app/Providers/AuthServiceProvider.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
66
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
77

8+
use App\Models\User;
9+
use App\Policies\UserPolicy;
10+
811
class AuthServiceProvider extends ServiceProvider
912
{
1013
/**
@@ -14,6 +17,7 @@ class AuthServiceProvider extends ServiceProvider
1417
*/
1518
protected $policies = [
1619
'App\Model' => 'App\Policies\ModelPolicy',
20+
User::class => UserPolicy::class,
1721
];
1822

1923
/**

‎database/factories/ModelFactory.php‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,14 @@
1212
*/
1313

1414
$factory->define(App\Models\User::class, function (Faker\Generator $faker) {
15+
$date_time = $faker->date . '' . $faker->time;
1516
return [
1617
'name' => $faker->name,
1718
'email' => $faker->safeEmail,
18-
'password' => bcrypt(str_random(10)),
19+
'is_admin' => false,
20+
'password' => str_random(10),
1921
'remember_token' => str_random(10),
22+
'created_at' => $date_time,
23+
'updated_at' => $date_time,
2024
];
2125
});
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
use Illuminate\Database\Schema\Blueprint;
4+
use Illuminate\Database\Migrations\Migration;
5+
6+
class AddIsAdminToUsersTable extends Migration
7+
{
8+
/**
9+
* Run the migrations.
10+
*
11+
* @return void
12+
*/
13+
public function up()
14+
{
15+
Schema::table('users', function (Blueprint $table) {
16+
$table->boolean('is_admin')->default(false);
17+
});
18+
}
19+
20+
/**
21+
* Reverse the migrations.
22+
*
23+
* @return void
24+
*/
25+
public function down()
26+
{
27+
Schema::table('users', function (Blueprint $table) {
28+
$table->dropColumn('is_admin');
29+
});
30+
}
31+
}

‎database/seeds/DatabaseSeeder.php‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public function run()
1414
{
1515
Model::unguard();
1616

17-
// $this->call(UserTableSeeder::class);
17+
$this->call('UsersTableSeeder');
1818

1919
Model::reguard();
2020
}

‎database/seeds/UsersTableSeeder.php‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
use Illuminate\Database\Seeder;
4+
use App\Models\User;
5+
6+
class UsersTableSeeder extends Seeder
7+
{
8+
/**
9+
* Run the database seeds.
10+
*
11+
* @return void
12+
*/
13+
public function run()
14+
{
15+
$users = factory(User::class)->times(50)->make();
16+
User::insert($users->toArray());
17+
18+
$user = User::find(1);
19+
$user->name = 'Aufree';
20+
$user->email = 'aufree@estgroupe.com';
21+
$user->password = 'password';
22+
$user->is_admin = true;
23+
$user->save();
24+
}
25+
}

‎public/css/app.css‎

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /