Skip to content

Commit b320723

Browse files
committed
alter 前后台用户添加额外属性区分isAdmin\ 超级管理员isSuperAdmin
、gate权限验证优化、后台用户管理优化
1 parent 23d0f09 commit b320723

File tree

6 files changed

+64
-22
lines changed

6 files changed

+64
-22
lines changed

app/Http/Controllers/Admin/UserController.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,12 @@ public function show($id)
122122
*/
123123
public function edit($id)
124124
{
125-
if($id == 1 && Auth::guard('admin')->user()->id !=1){//id=1的超级管理员只能自己修改
125+
$user = User::findOrFail($id);
126+
127+
if(!Auth::guard('admin')->user()->isSuperAdmin && $user->isSuperAdmin){//超级管理员只能自己修改
126128
return response()->view('admin.errors.403', ['previousUrl'=>\URL::previous()]);
127129
}
128130

129-
$user = User::findOrFail($id);
130-
131131
$roles = [];
132132
if ($user->roles) {
133133
foreach ($user->roles as $v) {
@@ -140,6 +140,7 @@ public function edit($id)
140140
}
141141
$data['rolesAll'] = Role::all()->toArray();
142142
$data['id'] = (int)$id;
143+
$data['isSuperAdmin'] = $user->isSuperAdmin;
143144
return view('admin.user.edit', $data);
144145
}
145146

@@ -152,11 +153,12 @@ public function edit($id)
152153
*/
153154
public function update(Requests\AdminUserUpdateRequest $request, $id)
154155
{
155-
if($id == 1 && Auth::guard('admin')->user()->id !=1){//id=1的超级管理员只能自己修改
156+
$user = User::findOrFail($id);
157+
158+
if(!Auth::guard('admin')->user()->isSuperAdmin && $user->isSuperAdmin){//超级管理员只能自己修改
156159
return response()->view('admin.errors.403', ['previousUrl'=>\URL::previous()]);
157160
}
158161

159-
$user = User::findOrFail($id);
160162
foreach ($this->fields as $field => $default) {
161163
$user->$field = $request->input($field);
162164
}
@@ -184,14 +186,18 @@ public function destroy($id)
184186
{
185187
$user = User::findOrFail($id);
186188

189+
if($user->isSuperAdmin){//超级管理员不能删除
190+
return redirect()->back()->withErrors("操作失败,不能删除超级管理员!");
191+
}
192+
187193
// foreach ($user->roles as $v) {
188194
// $user->roles()->detach($v);
189195
// }
190196

191197
// 移除用户身上所有身份...
192198
$user->roles()->detach();
193199

194-
if ($user && $user->id != 1 && $user->delete()) {//id=1的超级管理员不能删除
200+
if ($user && $user->delete()) {//超级管理员不能删除
195201
return redirect()->back()->withSuccess("删除成功!");
196202
} else {
197203
return redirect()->back()->withErrors("删除失败!");

app/Models/Admin/AdminUser.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class AdminUser extends Authenticatable
2323
*/
2424
protected $hidden = ['password', 'remember_token'];
2525

26+
//获取模型的json或数组返回值中添加数据库字段中不存在的属性
27+
protected $appends = ['isSuperAdmin'];
28+
2629
//用户角色
2730
public function roles()
2831
{
@@ -66,4 +69,22 @@ public function hasPermission($permission)
6669
// }
6770
// return true;
6871
// }
72+
//
73+
74+
/**
75+
* 访问不存在属性时,通过该方法添加额外属性识别后台登录用户,区分前端登录用户
76+
* @return boolean [description]
77+
*/
78+
public function getIsAdminAttribute()
79+
{
80+
return true;
81+
}
82+
83+
/**
84+
* 访问不存在属性时,通过该方法添加额外属性识别是否是超级管理员,id==1为超级管理员账号?
85+
* @return [type] [description]
86+
*/
87+
public function getIsSuperAdminAttribute(){
88+
return $this->id == 1;
89+
}
6990
}

app/Models/User.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,14 @@ class User extends Authenticatable
2626
protected $hidden = [
2727
'password', 'remember_token',
2828
];
29+
30+
31+
/**
32+
* 访问不存在属性时,通过该方法添加额外属性识别前端登录用户,区分后台登录用户
33+
* @return boolean [description]
34+
*/
35+
public function getIsAdminAttribute()
36+
{
37+
return false;
38+
}
2939
}

app/Providers/AuthServiceProvider.php

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
namespace App\Providers;
44

5-
use App\Http\Requests\Request;
6-
use Illuminate\Contracts\Auth\Access\Gate as GateContract;
5+
use Illuminate\Support\Facades\Gate;
76
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
8-
use League\Flysystem\Exception;
97

108
class AuthServiceProvider extends ServiceProvider
119
{
@@ -26,28 +24,35 @@ class AuthServiceProvider extends ServiceProvider
2624
*
2725
* @return void
2826
*/
29-
public function boot(GateContract $gate)
27+
public function boot()
3028
{
3129
// if(!empty($_SERVER['SCRIPT_NAME']) && strtolower($_SERVER['SCRIPT_NAME']) ==='artisan' ){
3230
// return false;
3331
// }
3432

3533
$this->registerPolicies();
3634

37-
$gate->before(function ($user, $ability) {
38-
if ($user->id === 1) {//超级管理员绕过gate验证
39-
return true;
35+
Gate::before(function ($user, $ability) {
36+
37+
if($user->isAdmin){//后台登录用户才进行gate权限授权 区分前台登录用户 用户模型getIsAdminAttribute添加方法返回值识别
38+
39+
if ($user->isSuperAdmin) {//超级管理员绕过gate验证
40+
return true;
41+
}
42+
43+
$permissions = \App\Models\Admin\Permission::with('roles')->get();
44+
45+
foreach ($permissions as $permission) {
46+
Gate::define($permission->name, function ($user) use ($permission) {
47+
return $user->hasPermission($permission);
48+
});
49+
}
50+
4051
}
41-
});
4252

53+
});
4354

44-
$permissions = \App\Models\Admin\Permission::with('roles')->get();
4555

46-
foreach ($permissions as $permission) {
47-
$gate->define($permission->name, function ($user) use ($permission) {
48-
return $user->hasPermission($permission);
49-
});
50-
}
5156
}
5257

5358

resources/views/admin/user/_form.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
<div class="form-group">
3030
<label for="tag" class="col-md-3 control-label">角色列表</label>
31-
@if(isset($id)&&$id==1)
31+
@if($isSuperAdmin)
3232
<div class="col-md-4" style="float:left;padding-left:20px;margin-top:8px;"><h2>超级管理员</h2></div>
3333
@else
3434
<div class="col-md-6">

resources/views/admin/user/index.blade.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@
129129
{
130130
'targets': -1, "render": function (data, type, row) {
131131
var caozuo = '<a style="margin:3px;" href="{{ url("/admin/user") }}/' + row['id'] + '/edit" class="X-Small btn-xs text-success "><i class="fa fa-edit"></i> 编辑</a>';
132-
if (row['id'] != 1) {
132+
if (row['isSuperAdmin'] == false) {
133133
caozuo += '<a style="margin:3px;" href="#" attr="' + row['id'] + '" class="delBtn X-Small btn-xs text-danger "><i class="fa fa-trash"></i> 删除</a>';
134134
}
135135
return caozuo;

0 commit comments

Comments
 (0)