实现手动设计的权限管理

This commit is contained in:
augushong
2020-05-14 21:36:07 +08:00
parent ddb72ba623
commit 217120d274
16 changed files with 71 additions and 327 deletions

View File

@@ -31,7 +31,7 @@ class AdminGroup extends Common
public function create()
{
//
$premission_list = AdminPermission::order('app,controller,action')->select();
$premission_list = AdminPermission::order('key')->select();
View::assign('permission_list',$premission_list);
return View::fetch();
@@ -87,7 +87,8 @@ class AdminGroup extends Common
$model_admin_group = AppAdminGroup::find($id);
$premission_list = AdminPermission::order('app,controller,action')->select();
$premission_list = AdminPermission::order('key')->select();
View::assign('permission_list',$premission_list);
View::assign('admin_group',$model_admin_group);

View File

@@ -18,7 +18,7 @@ class AdminPermission extends Common
{
//
$list = AppAdminPermission::order('app,controller,action')->paginate();
$list = AppAdminPermission::order('key')->paginate();
View::assign('list',$list);
@@ -40,14 +40,6 @@ class AdminPermission extends Common
$model_permission = AppAdminPermission::find($id);
if(isset($post_data['url'])){
$url_info = \explode('/',$post_data['url']);
$post_data['app'] = $url_info[0];
$post_data['controller'] = $url_info[1];
$post_data['action'] = $url_info[2];
}
$model_permission->data($post_data);
$model_permission->save();

View File

@@ -31,26 +31,6 @@ class Common extends BaseController{
throw new HttpResponseException(redirect('admin/Login/index'));
}
}
if(!empty($this->adminInfo['group'])){
$current_access_info = [
'app'=>app('http')->getName(),
'controller'=>request()->controller(),
'action'=>request()->action()
];
$model_permission = AdminPermission::where($current_access_info)->find();
if(!empty($model_permission)){
if(!in_array($model_permission->id,$this->adminInfo->group->permissions)){
return $this->error('您没有访问权限');
}
}
}
}
View::assign('admin',$this->adminInfo);

View File

@@ -10,12 +10,16 @@
// +----------------------------------------------------------------------
// 应用公共文件
use app\model\Admin;
use app\model\AdminPermission;
use app\model\SystemConfig;
use think\facade\Cache;
use League\Flysystem\Util\MimeType;
use think\File;
use think\facade\Filesystem;
use app\model\UploadFiles;
use think\facade\Session;
function json_message($data = [], $code = 0, $msg = '')
{
@@ -193,3 +197,46 @@ function array2level($array, $pid = 0, $level = 1)
return $list;
}
function check_permission($key,$admin_id = null)
{
if(is_null($admin_id)){
$admin_id = Session::get('admin_id');
}
if(empty($admin_id)){
return true;
}
if($admin_id == 1){
return true;
}
$model_admin = Admin::cache(60)->find($admin_id);
if(empty($model_admin->getData('group_id'))){
return true;
}
$cache_key = 'permission_'.$key;
$model_permission = Cache::get($cache_key);
if (empty($model_permission)) {
$model_permission = AdminPermission::where('key',$key)->find();
}
if (empty($model_permission)) {
$model_permission = AdminPermission::create([
'key'=>$key
]);
Cache::set($cache_key,$model_permission,60);
}
if(in_array($model_permission->id,$model_admin->group->permissions)){
return true;
}
return false;
}

View File

@@ -35,13 +35,13 @@ class BaseController extends AppBaseController
$this->indexTplMethodCurrentAction = $this->indexTplMethod.Str::studly($this->request->action());
}
public function assign($template, $value)
{
return View::assign($template, $value);
}
}
public function fetch($template = '', $vars = [])
{

View File

@@ -7,25 +7,9 @@ use app\Request;
class PermissionRecord
{
public function handle(Request $request, \Closure $next)
{
public function handle(Request $request, \Closure $next)
{
$current_access_info = [
'app'=>app('http')->getName(),
'controller'=>$request->controller(),
'action'=>$request->action()
];
if(in_array('',$current_access_info)){
return $next($request);
}
$model_permission = AdminPermission::where($current_access_info)->find();
if(empty($model_permission)){
AdminPermission::create($current_access_info);
}
return $next($request);
}
return $next($request);
}
}

View File

@@ -27,7 +27,7 @@ class Admin extends Model
return [];
}
return AdminGroup::where('id',$this->getData('group_id'))->cache(1)->find();
return AdminGroup::where('id',$this->getData('group_id'))->cache(60)->find();
}
}

View File

@@ -19,22 +19,5 @@ class AdminLog extends Model
return $this->belongsTo('Admin','admin_id');
}
public function getUrlAttr()
{
return AdminPermission::where([
'app'=>$this->getData('app'),
'controller'=>$this->getData('controller'),
'action'=>$this->getData('action'),
])->find();
}
public function setParamAttr($value)
{
return json_encode($value,JSON_UNESCAPED_UNICODE);
}
public function getParamAttr($value)
{
return \mb_substr($value,0,30);
}
}

View File

@@ -22,14 +22,5 @@ class AdminPermission extends Model
return $status[intval($value)];
}
public function getNameAttr($value)
{
if(empty($value)){
$value = $this->getData('app').'/'.$this->getData('controller').'/'.$this->getData('action');
}
return $value;
}
}