解读以下PHP方法 public function search(array $auth, $where, string $clientField , string $shopField , string $storeField ) { $where = !is_array($where) ? json_decode($where, true) : $where; //验证权限 $client=false; $shop=false; $store=false; foreach($where as $k=>$v){ if($clientField){ if($v['field']==$clientField){ $v['value']=$auth['client_id']; $client=true; } } if($shopField && $auth['shop_ids'] != '0'){ if($v['field']==$shopField){ $v['value']=$this->authCheck($auth['shop_ids'],$v['value']); $shop=true; } } if($storeField && $auth['store_ids'] != '0'){ if($v['field']==$storeField){ $v['value']=$this->authCheck($auth['shop_ids'],$v['value']); $store=true; } } } if(!$client && $clientField){ $where[]=[ 'type'=>'=', 'field'=>$clientField, 'value'=>$auth['client_id'] ]; } if(!$shop && $shopField && $auth['shop_ids'] !='0'){ $where[]=[ 'type'=>'=', 'field'=>$shopField, 'value'=>$auth['shop_ids'] ]; } if(!$store && $storeField && $auth['store_ids'] !='0'){ $where[]=[ 'type'=>'=', 'field'=>$storeField, 'value'=>$auth['store_ids'] ]; } //转化搜索 $search=[]; foreach ($where as $k => $v) { if ($v['value']) { switch ($v['type']) { case '=': $value = $v['value']; if (is_array($v['value'])) { $value = $v['value'][0]['id']; } $search[] = [$v['field'], '=', $value]; break; case 'like': $search[] = [$v['field'], 'like', '%' . $v['value'] . '%']; break; case 'between': $search[] = [$v['field'], 'between', [$v['value'][0], $v['value'][1]]]; break; case 'in': $value = []; foreach ($v['value'] as $k2 => $v2) { $value[] = $v2['id']; } $value = implode(',', $value); $search[] = [$v['field'], 'in', $value]; break; case 'time': $value = $v['value']; $start = ''; $end = ''; //今日 if ($v['value'] == 'today') { $start = strtotime(date("Y-m-d") . ' 00:00:00'); $end = strtotime(date("Y-m-d") . ' 24:00:00'); } //昨日 if ($v['value'] == 'yesterday') { $start = strtotime(date("Y-m-d", strtotime("-1 day")) . ' 00:00:00'); $end = strtotime(date("Y-m-d", strtotime("-1 day")) . ' 24:00:00'); } //最近7天 if ($v['value'] == '7') { $end = strtotime(date("Y-m-d") . ' 00:00:00'); $start = strtotime(date("Y-m-d", strtotime("-7 day")) . ' 24:00:00'); } //最近30天 if ($v['value'] == '30') { $end = strtotime(date("Y-m-d") . ' 00:00:00'); $start = strtotime(date("Y-m-d", strtotime("-30 day")) . ' 24:00:00'); } //自定义时间 if (is_array($v['value'])) { $start = strtotime($value[0] . ' 00:00:00'); $end = strtotime($value[1] . ' 24:00:00'); } $search[] = [$v['field'], 'between', [$start, $end]]; break; } } } return $search; } /** * @param $value1 * @param $value2 * @return string */ public function authCheck($value1,$value2){ $value1=explode(',',$value1); $value2=explode(',',$value2); $value=[]; foreach($value2 as $k=>$v){ foreach($value1 as $k2=>$v2){ if($v == $v2){ $value[]=$v2; } } } return implode(',',$value); }
时间: 2023-03-29 22:01:58 浏览: 252
这是一个 PHP 方法,名为 search,接受五个参数:一个数组 $auth,一个 $where,以及三个字符串 $clientField、$shopField 和 $storeField。在方法中,首先对 $where 进行了判断,如果不是数组,则将其解码为数组。接下来,对权限进行了验证,分别对 $clientField、$shopField 和 $storeField 进行了判断,如果 $where 中的某个元素的 field 与对应的字符串相等,则将其 value 设置为 $auth 中对应的值,并将对应的变量设置为 true。
相关问题
public function lists() { $user = User::auth(); // $data = Request::all(); $pid = intval($data['pid']); // $permission = 1000; if ($pid > 0) { File::permissionFind($pid, 0, $permission); $builder = File::wherePid($pid); } else { $builder = File::whereUserid($user->userid); } // $array = $builder->take(500)->get()->toArray(); foreach ($array as &$item) { $item['permission'] = $permission; } // if ($pid > 0) { // 遍历获取父级 while ($pid > 0) { $file = File::whereId($pid)->first(); if (empty($file)) { break; } $pid = $file->pid; $temp = $file->toArray(); $temp['permission'] = $file->getPermission($user->userid); $array[] = $temp; } } else { // 获取共享相关 DB::statement("SET SQL_MODE=''"); $pre = DB::connection()->getTablePrefix(); $list = File::select(["files.*", DB::raw("MAX({$pre}file_users.permission) as permission")]) ->join('file_users', 'files.id', '=', 'file_users.file_id') ->where('files.userid', '!=', $user->userid) ->where(function ($query) use ($user) { $query->where('file_users.userid', 0); $query->orWhere('file_users.userid', $user->userid); }) ->groupBy('files.id') ->take(100) ->get(); if ($list->isNotEmpty()) { foreach ($list as $file) { $temp = $file->toArray(); $temp['pid'] = 0; $array[] = $temp; } } } // 图片直接返回预览地址 foreach ($array as &$item) { File::handleImageUrl($item)
这段代码是一个PHP函数,名为`lists()`。函数的作用是根据用户的权限获取文件列表。下面是代码的解析:
1. 获取当前登录用户的认证信息。
2. 获取请求中的数据。
3. 将请求中的`pid`参数转换为整数类型。
4. 根据`pid`判断是否存在父级文件夹,如果存在,则查询该文件夹下的文件;否则,查询当前用户的文件。
5. 获取符合条件的文件列表,最多返回500条,并将其转换为数组形式。
6. 遍历文件列表,为每个文件设置权限。
7. 如果存在父级文件夹,通过`while`循环获取其所有父级文件夹,并设置权限。
8. 如果不存在父级文件夹,查询共享文件列表,并将其添加到文件数组中。
9. 对于图片文件,处理其预览地址。
请注意,这只是对代码的初步解析,具体的逻辑和实现可能需要结合其他代码进行分析。
@Component public class AuthUtil { private final RedisTemplateUtil<String, Object> permRedisManager; public AuthUtil(RedisTemplateUtil<String, Object> permRedisManager) { this.permRedisManager = permRedisManager; } public static final String SYS_EMPLOYEE_NAME = "sysEmployee"; public static final String MEMBER_NAME = "member"; public static final Long MEMBER_EXPIRES_TIME = 60L * 60 * 24; public static final Long SYS_EMPLOYEE_EXPIRES_TIME = 60L * 30; public String buildToken(String id, String name, Object loginObj) { String jwt = JWTBuilder.createJWT(id, name, loginObj); permRedisManager.set(id + "RF_AUTH", jwt, MEMBER_EXPIRES_TIME); String md5 = PasswordUtil.md5(jwt); if (name.equals(AuthUtil.SYS_EMPLOYEE_NAME)) { permRedisManager.set(PasswordUtil.md5(jwt), jwt, SYS_EMPLOYEE_EXPIRES_TIME); } else if (name.equals(AuthUtil.MEMBER_NAME)) { permRedisManager.set(PasswordUtil.md5(jwt), jwt, MEMBER_EXPIRES_TIME); } return md5; } public void removeToken(long id) { Object jetObj = permRedisManager.get(id + "RF_AUTH"); if (Validator.valid(jetObj)) { String md5 = PasswordUtil.md5((String) jetObj); permRedisManager.del(id + "RF_AUTH"); permRedisManager.del(md5); } } public String buildTokenWithExpires(String id, String name, Object loginObj) { String jwt = JWTBuilder.createJWTWithExpires(id, name, loginObj, 0); permRedisManager.set(id + "RF_AUTH", jwt); return jwt; } public String buildTokenWithExpires(String id, String name, Object loginObj, long time) { String jwt = JWTBuilder.createJWTWithExpires(id, name, loginObj, time); permRedisManager.set(id + "RF_AUTH", jwt); return jwt; } public void setPerm(long id, List<?> perms) { JSONArray array = (JSONArray) JSONArray.toJSON(perms); permRedisManager.set(id + "RF_AUTH_PERM", array.toJSONString()); } }这个类用于生成token和解析token,请问登录接口用java代码怎么写?@DeleteMapping("/deleteCode/{encode}") public JsonData<User> deleteCode(@PathVariable String encode) 接口在vue前端如何访问?
生成token的代码可以像下面这样写:
@PostMapping("/login")
public JsonData<String> login(@RequestBody User user) {
// 根据用户名和密码查询用户信息
User loginUser = userService.login(user.getUsername(), user.getPassword());
if (loginUser == null) {
return JsonData.buildError("用户名或密码错误");
}
// 生成token并返回
AuthUtil authUtil = new AuthUtil(redisTemplateUtil);
String token = authUtil.buildToken(loginUser.getId().toString(), AuthUtil.MEMBER_NAME, loginUser);
return JsonData.buildSuccess(token);
}
其中,`userService.login` 方法用于查询数据库中是否存在对应的用户信息。
关于前端访问接口,可以使用 axios 库进行请求。假设接口地址为 `/deleteCode/{encode}`,则可以像下面这样写:
import axios from 'axios';
const encode = 'xxxxxx'; // 假设需要传递的参数为 xxxxxx
axios.delete(`/deleteCode/${encode}`).then(response => {
// 请求成功后的处理
}).catch(error => {
// 请求失败后的处理
});
其中,`axios.delete` 方法表示发送一个 DELETE 请求,`${encode}` 表示将参数 encode 替换到接口地址中的占位符 `{encode}` 中。
阅读全文