网站设计中超链接怎么做,知名网站建设官网,网上购物商城网站建设毕业设计,网站注销怎么做消TP5前后端分离RBAC权限管理API 1.创建配置项目2.管理员功能2.1登录验证2.2.返回分页数据2.3增删改功能 3.角色功能3.权限管理4.给管理员分配角色5.给角色分配权限6.导航菜单功能 坑神的博客文章可以参考#xff0c;还可以和他交流请教#xff0c;坑神人很nice#xff01; 1.… TP5前后端分离RBAC权限管理API 1.创建配置项目2.管理员功能2.1登录验证2.2.返回分页数据2.3增删改功能 3.角色功能3.权限管理4.给管理员分配角色5.给角色分配权限6.导航菜单功能 坑神的博客文章可以参考还可以和他交流请教坑神人很nice 1.创建配置项目
1.创建项目 我用的是phpstudy和composer在phpstudy的www目录下运行cmd然后创建5.1的tp框架,创建名是rbac
composer create-project topthink/think5.1.* rbac2.设置项目
普通设置app_debug true, app_trace true。这里我做API模块所以方便起见可以设置默认入口文件。数据库设置database.php配置数据库信息。域名设置在phpstudy和hosts里面设置域名。在项目目录下cmdphp think make:controller api/Login创建api模块下Login控制器。
2.管理员功能
2.1登录验证
1.首先前后端分离需要解决跨域问题所以建一个Cross控制器api控制器之后继承它。
php think make:controller api/Cross?phpnamespace app\api\controller;use think\Controller;
use think\Request;class Cross extends Controller
{protected function initialize(){parent::initialize();header(Access-Control-Allow-Origin:*);header(Access-Control-Allow-Methods:GET, POST, OPTIONS,PUT, DELETE);header(Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,token,Accept,x-access-sign,x-access-time);if (request()-isOptions()) {exit();}}
}
class Login extends Cross2.jwtJSON Web Token登录 首先创建model
php think make:model AdminModel?phpnamespace app\common\model;use think\Model;class AdminModel extends Model
{protected $tableadmin;#表名
}连接数据库表在login的controller中
use app\common\model\AdminModel;
$dbnew AdminModel();引入JWT进行登录验证
composer require firebase/php-jwt?phpnamespace app\api\controller;
use app\common\model\AdminModel;
use \Firebase\JWT\JWT;
use think\Controller;
use think\Request;class Login extends Cross
{public function index(Request $request){$data$request-param();$dbnew AdminModel();$info$db-where(username,$data[username])-find();if(!$info){return json([code 0, msg 账号不存在]);}if($info[password]!$data[password]){return json([code 0, msg 账号或者密码不存在]);}$jwtnew JWT();$payload[issrbac,audrbac,iat time(), // token 的创建时间nbf time(), // token 的生效时间exp time() 3600, // token 的过期时间aid$info[id]];$keykey;$keyId keyId;$token$jwt::encode($payload,$key,HS256,$keyId);// dump($token);return json([code 1, msg $token]);}}
3.解析token
php think make:controller api/Base --plain#Base控制器只建一个初始化方法然后这个Base类也要继承Cross实现跨域请求这个算是一个中间件初始化请求的token内容从token里面获取uid信息。
?phpnamespace app\api\controller;use think\Controller;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class Base extends Cross
{public function initialize(){parent::initialize();$header request()-header();if (!isset($header[token])){return json([code0,msg请先登录])-send();}if(empty($header[token])){return json([code0,msg请先登录])-send();}$key new Key(key, HS256);$info JWT::decode($header[token], $key);$this-aid$info-aid;#token验证通过将token里的uid拿到。// return json([code1,token$info])-send();}
}4.请求路由控制器继承上面的base就可以拿到用户id然后进行权限验证
php think make:controller api/v1/Admin?phpnamespace app\api\controller\v1;
use app\common\model\AdminModel;
use app\api\controller\Base;
use think\Request;class Admin extends Base
{public function index(){$aid$this-aid;$dbnew AdminModel();$admininfo$db-where(id,$aid)-find();#通过uid拿到这个用户的信息dump($admininfo);die();}
}
2.2.返回分页数据
通过$db-limit($limit)-page($page)-field($field)-select();即可获得指定页数据。
public function index(Request $request){$limit$request-param(limit)?$request-param(limit):10;$page$request-param(page)?$request-param(page):1;$dbnew AdminModel();$fieldid,username,create_time;$list$db-limit($limit)-page($page)-field($field)-select();if ($list){$count$db-count(id);return json([code1,msg获取成功,data$list,total$count]);}else{return json([code0,msg暂无数据]);}}2.3增删改功能
public function save(Request $request)//修改和增加功能{$data$request-param();// dump($data);die();$dbnew AdminModel();if (isset($data[id]) !empty($data[id])){//有id,修改功能$info$db-where(id,$data[id])-find();// dump($info);die();if (isset($data[password]) !empty($data[password])){//要修改密码if ($info[password]md5($data[password])){$data[password]$info[password];}else{$data[password]md5($data[password]);}}$res$db-save($data,[id$info[id]]);//修改对象}else{//无id添加功能$data[password]md5($data[password]);//密码加密后再存到数据库$res$db-save($data);//添加对象}if($res){return json([code1,msg操作成功]);}else{return json([code0,msg操作失败]);}}public function delete(Request $request)//删除功能{$id$request-param(id);$dbnew AdminModel();if ($id1){//没有删除权限return json([code0,msg此用户不能删除]);}$res$db-where(id,$id)-delete();if ($res){return json([code1,msg操作成功]);}else{return json([code0,msg操作失败]);}}3.角色功能
1.创建模型和控制器
php think make:controller api/v1/Role
php think make:model RoleModel2.创建数据库并在模型里连接到数据库
?php
namespace app\common\model;
use think\Model;
class RoleModel extends Model
{protected $tablerole;
}3.在controller里面写功能 3.1分页功能
public function index(Request $request){$limit$request-param(limit)?$request-param(limit):10;$page$request-param(page)?$request-param(page):1;$dbnew RoleModel();$list$db-where(status,1)-limit($limit)-page($page)-select();if(!$list-isEmpty()){$count$db-where(status,1)-count(id);return json([code1,msg获取成功,data$list,total$count]);}else{return json([code0,msg暂无数据]);}}3.2增删改功能 public function save(Request $request){if (!$request-isPost()){return json([code0,msg操作失败]);}$data$request-param();$dbnew RoleModel();if(isset($data[id])!empty($data[id])){$res$db-save($data,[id$data[id]]);}else{$res$db-save($data);}if ($res){return json([code1,msg操作成功]);}else{return json([code0,msg操作失败]);}}public function delete(Request $request){$id$request-param(id);$dbnew RoleModel();$res$db-where(id,$id)-delete();if ($res){return json([code1,msg操作成功]);}else{return json([code0,msg操作失败]);}}3.权限管理
1.创建模型和控制器
php think make:controller api/v1/Rule
php think make:model RuleModel2.创建数据库并在模型里连接到数据库
?php
namespace app\common\model;
use think\Model;
class RuleModel extends Model
{protected $tablerule;
}3.在controller里面写功能分页查询和增删改功能。
4.给管理员分配角色
1.创建模型一对多的中间表和控制器
php think make:controller api/v1/RoleAssign
php think make:model AdminRoleModel?php
namespace app\common\model;
use think\Model;
class AdminRoleModel extends Model
{protected $tableadmin_role;
}2.在控制器里进行增改查工作。
public function save(Request $request)//增改admin的role{$admin_id$request-param(admin_id);$role_id$request-param(role_id);$dbnew AdminRoleModel();$info$db-where(admin_id,$admin_id)-find();//如果admin——id存在就是修改用户角色表否则是增加if($info){$res$db-where(id,$info[id])-setField(role_id,$role_id);}else{$data[admin_id]$admin_id;$data[role_id]$role_id;$res$db-save($data);}if ($res){return json([code1,msg操作成功]);}else{return json([code0,msg操作失败]);}}public function read(Request $request)//根据id查看它的role有哪些{$admin_id$request-param(admin_id);$dbnew AdminRoleModel();$info$db-where(admin_id,$admin_id)-find();$dbnew RoleModel();$list$db-where(status,1)-field(id,name)-select();if($info){$tmpexplode(,,$info[role_id]);#如果$info[role_id]的值为1,2,3那么$tmp的值就会是一个数组[1, 2, 3]foreach($list as $k$v){if(in_array($v[id],$tmp)){$list[$k][check]true;}else{$list[$k][check]false;}}}else{foreach($list as $k$v){$list[$k][check]false;}}return json([code1,data$list]);}5.给角色分配权限
1.创建模型一对多的中间表和控制器
php think make:controller api/v1/RoleRule
php think make:model RoleRuleModel?php
namespace app\common\model;
use think\Model;
class RoleRuleModel extends Model
{protected $tablerole_rule;
}2.在控制器里进行增改查工作同上。
6.导航菜单功能