perf:完善临时帐号权限

This commit is contained in:
kuaifan 2023-02-19 23:48:27 +08:00
parent 5f0b858baf
commit d3a50e7810
11 changed files with 56 additions and 35 deletions

View File

@ -315,6 +315,9 @@ class DialogController extends AbstractController
if (empty($callUser) || empty($callUser->tel)) { if (empty($callUser) || empty($callUser->tel)) {
return Base::retError("对方未设置联系电话"); return Base::retError("对方未设置联系电话");
} }
if ($user->isTemp()) {
return Base::retError("无法查看联系电话");
}
// //
$add = null; $add = null;
$res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'notice', [ $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'notice', [
@ -353,7 +356,7 @@ class DialogController extends AbstractController
return Base::retError('错误的会话'); return Base::retError('错误的会话');
} }
// //
$dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); $dialog = WebSocketDialog::checkUserDialog($user, $userid);
if (empty($dialog)) { if (empty($dialog)) {
return Base::retError('打开会话失败'); return Base::retError('打开会话失败');
} }
@ -866,8 +869,7 @@ class DialogController extends AbstractController
$fileLink = $file->getShareLink($user->userid); $fileLink = $file->getShareLink($user->userid);
$fileMsg = "<a class=\"mention file\" href=\"{{RemoteURL}}single/file/{$fileLink['code']}\" target=\"_blank\">~{$file->getNameAndExt()}</a>"; $fileMsg = "<a class=\"mention file\" href=\"{{RemoteURL}}single/file/{$fileLink['code']}\" target=\"_blank\">~{$file->getNameAndExt()}</a>";
// //
$sender = $user->userid; return AbstractModel::transaction(function() use ($user, $fileMsg, $userids, $dialogids) {
return AbstractModel::transaction(function() use ($sender, $fileMsg, $userids, $dialogids) {
$msgs = []; $msgs = [];
$already = []; $already = [];
if ($dialogids) { if ($dialogids) {
@ -875,7 +877,7 @@ class DialogController extends AbstractController
$dialogids = [$dialogids]; $dialogids = [$dialogids];
} }
foreach ($dialogids as $dialogid) { foreach ($dialogids as $dialogid) {
$res = WebSocketDialogMsg::sendMsg(null, $dialogid, 'text', ['text' => $fileMsg], $sender); $res = WebSocketDialogMsg::sendMsg(null, $dialogid, 'text', ['text' => $fileMsg], $user->userid);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {
$msgs[] = $res['data']; $msgs[] = $res['data'];
$already[] = $dialogid; $already[] = $dialogid;
@ -890,9 +892,9 @@ class DialogController extends AbstractController
if (!User::whereUserid($userid)->exists()) { if (!User::whereUserid($userid)->exists()) {
continue; continue;
} }
$dialog = WebSocketDialog::checkUserDialog($sender, $userid); $dialog = WebSocketDialog::checkUserDialog($user, $userid);
if ($dialog && !in_array($dialog->id, $already)) { if ($dialog && !in_array($dialog->id, $already)) {
$res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $fileMsg], $sender); $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $fileMsg], $user->userid);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {
$msgs[] = $res['data']; $msgs[] = $res['data'];
} }
@ -1216,7 +1218,7 @@ class DialogController extends AbstractController
} }
WebSocketDialog::checkDialog($msg->dialog_id); WebSocketDialog::checkDialog($msg->dialog_id);
// //
return $msg->forwardMsg($dialogids, $userids, $user->userid); return $msg->forwardMsg($dialogids, $userids, $user);
} }
/** /**
@ -1445,6 +1447,9 @@ class DialogController extends AbstractController
} }
$chatName = implode(", ", $array); $chatName = implode(", ", $array);
} }
if ($user->isTemp()) {
return Base::retError('无法创建群组');
}
$dialog = WebSocketDialog::createGroup($chatName, $userids, 'user', $user->userid); $dialog = WebSocketDialog::createGroup($chatName, $userids, 'user', $user->userid);
if (empty($dialog)) { if (empty($dialog)) {
return Base::retError('创建群组失败'); return Base::retError('创建群组失败');

View File

@ -148,7 +148,7 @@ class PublicController extends AbstractController
} }
Cache::put($cacheKey, "yes", Carbon::now()->addDay()); Cache::put($cacheKey, "yes", Carbon::now()->addDay());
// //
$dialog = WebSocketDialog::checkUserDialog($botUser->userid, $checkin->userid); $dialog = WebSocketDialog::checkUserDialog($botUser, $checkin->userid);
if ($dialog) { if ($dialog) {
$hi = date("H:i"); $hi = date("H:i");
$pre = $type == "up" ? "上班" : "下班"; $pre = $type == "up" ? "上班" : "下班";

View File

@ -1101,7 +1101,7 @@ class UsersController extends AbstractController
if (!User::whereUserid($userid)->exists()) { if (!User::whereUserid($userid)->exists()) {
continue; continue;
} }
$dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); $dialog = WebSocketDialog::checkUserDialog($user, $userid);
if ($dialog) { if ($dialog) {
$res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'meeting', $data, $user->userid); $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'meeting', $data, $user->userid);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {
@ -1151,7 +1151,7 @@ class UsersController extends AbstractController
if (!User::whereUserid($userid)->exists()) { if (!User::whereUserid($userid)->exists()) {
continue; continue;
} }
$dialog = WebSocketDialog::checkUserDialog($user->userid, $userid); $dialog = WebSocketDialog::checkUserDialog($user, $userid);
if ($dialog) { if ($dialog) {
$res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'meeting', $data, $user->userid); $res = WebSocketDialogMsg::sendMsg(null, $dialog->id, 'meeting', $data, $user->userid);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {

View File

@ -1448,8 +1448,8 @@ class ProjectTask extends AbstractModel
return; return;
} }
$owners = $this->taskUser->pluck('owner', 'userid')->toArray(); $owners = $this->taskUser->pluck('owner', 'userid')->toArray();
$users = User::whereIn('userid', $userids)->whereNull('disable_at')->get(); $receivers = User::whereIn('userid', $userids)->whereNull('disable_at')->get();
if (empty($users)) { if (empty($receivers)) {
return; return;
} }
@ -1467,18 +1467,18 @@ class ProjectTask extends AbstractModel
}; };
/** @var User $user */ /** @var User $user */
foreach ($users as $user) { foreach ($receivers as $receiver) {
$data = [ $data = [
'type' => $type, 'type' => $type,
'userid' => $user->userid, 'userid' => $receiver->userid,
'task_id' => $this->id, 'task_id' => $this->id,
]; ];
if (in_array($type, [1, 2]) && ProjectTaskPushLog::where($data)->exists()) { if (in_array($type, [1, 2]) && ProjectTaskPushLog::where($data)->exists()) {
continue; continue;
} }
// //
$replace = $owners[$user->userid] ? "您负责的任务" : "您协助的任务"; $replace = $owners[$receiver->userid] ? "您负责的任务" : "您协助的任务";
$dialog = WebSocketDialog::checkUserDialog($botUser->userid, $data['userid']); $dialog = WebSocketDialog::checkUserDialog($botUser, $receiver->userid);
if ($dialog) { if ($dialog) {
ProjectTaskPushLog::createInstance($data)->save(); ProjectTaskPushLog::createInstance($data)->save();
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', [ WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', [

View File

@ -481,37 +481,40 @@ class WebSocketDialog extends AbstractModel
/** /**
* 获取会员对话(没有自动创建) * 获取会员对话(没有自动创建)
* @param int $userid 会员ID * @param User $user 发起会话的会员
* @param int $userid2 另一个会员ID * @param int $receiver 另一个会员ID
* @return self|null * @return self|null
*/ */
public static function checkUserDialog($userid, $userid2) public static function checkUserDialog($user, $receiver)
{ {
if ($userid == $userid2) { if ($user->userid == $receiver) {
$userid2 = 0; $receiver = 0;
} }
$dialogUser = self::select(['web_socket_dialogs.*']) $dialogUser = self::select(['web_socket_dialogs.*'])
->join('web_socket_dialog_users as u1', 'web_socket_dialogs.id', '=', 'u1.dialog_id') ->join('web_socket_dialog_users as u1', 'web_socket_dialogs.id', '=', 'u1.dialog_id')
->join('web_socket_dialog_users as u2', 'web_socket_dialogs.id', '=', 'u2.dialog_id') ->join('web_socket_dialog_users as u2', 'web_socket_dialogs.id', '=', 'u2.dialog_id')
->where('u1.userid', $userid) ->where('u1.userid', $user->userid)
->where('u2.userid', $userid2) ->where('u2.userid', $receiver)
->where('web_socket_dialogs.type', 'user') ->where('web_socket_dialogs.type', 'user')
->first(); ->first();
if ($dialogUser) { if ($dialogUser) {
return $dialogUser; return $dialogUser;
} }
return AbstractModel::transaction(function () use ($userid2, $userid) { if ($receiver > 0 && $user->isTemp()) {
throw new ApiException('无法发起会话');
}
return AbstractModel::transaction(function () use ($receiver, $user) {
$dialog = self::createInstance([ $dialog = self::createInstance([
'type' => 'user', 'type' => 'user',
]); ]);
$dialog->save(); $dialog->save();
WebSocketDialogUser::createInstance([ WebSocketDialogUser::createInstance([
'dialog_id' => $dialog->id, 'dialog_id' => $dialog->id,
'userid' => $userid, 'userid' => $user->userid,
])->save(); ])->save();
WebSocketDialogUser::createInstance([ WebSocketDialogUser::createInstance([
'dialog_id' => $dialog->id, 'dialog_id' => $dialog->id,
'userid' => $userid2, 'userid' => $receiver,
])->save(); ])->save();
return $dialog; return $dialog;
}); });

View File

@ -367,12 +367,12 @@ class WebSocketDialogMsg extends AbstractModel
* 转发消息 * 转发消息
* @param array|int $dialogids * @param array|int $dialogids
* @param array|int $userids * @param array|int $userids
* @param int $sender 发送的会员ID * @param User $user 发送的会员
* @return mixed * @return mixed
*/ */
public function forwardMsg($dialogids, $userids, $sender) public function forwardMsg($dialogids, $userids, $user)
{ {
return AbstractModel::transaction(function() use ($dialogids, $sender, $userids) { return AbstractModel::transaction(function() use ($dialogids, $user, $userids) {
$originalMsg = Base::json2array($this->getRawOriginal('msg')); $originalMsg = Base::json2array($this->getRawOriginal('msg'));
$msgs = []; $msgs = [];
$already = []; $already = [];
@ -381,7 +381,7 @@ class WebSocketDialogMsg extends AbstractModel
$dialogids = [$dialogids]; $dialogids = [$dialogids];
} }
foreach ($dialogids as $dialogid) { foreach ($dialogids as $dialogid) {
$res = self::sendMsg(null, $dialogid, $this->type, $originalMsg, $sender); $res = self::sendMsg(null, $dialogid, $this->type, $originalMsg, $user->userid);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {
$msgs[] = $res['data']; $msgs[] = $res['data'];
$already[] = $dialogid; $already[] = $dialogid;
@ -396,9 +396,9 @@ class WebSocketDialogMsg extends AbstractModel
if (!User::whereUserid($userid)->exists()) { if (!User::whereUserid($userid)->exists()) {
continue; continue;
} }
$dialog = WebSocketDialog::checkUserDialog($sender, $userid); $dialog = WebSocketDialog::checkUserDialog($user, $userid);
if ($dialog && !in_array($dialog->id, $already)) { if ($dialog && !in_array($dialog->id, $already)) {
$res = self::sendMsg(null, $dialog->id, $this->type, $originalMsg, $sender); $res = self::sendMsg(null, $dialog->id, $this->type, $originalMsg, $user->userid);
if (Base::isSuccess($res)) { if (Base::isSuccess($res)) {
$msgs[] = $res['data']; $msgs[] = $res['data'];
} }

View File

@ -150,7 +150,7 @@ class BotReceiveMsgTask extends AbstractTask
$notice = "创建失败。"; $notice = "创建失败。";
break; break;
} }
$dialog = WebSocketDialog::checkUserDialog($data->userid, $msg->userid); $dialog = WebSocketDialog::checkUserDialog($data, $msg->userid);
if ($dialog) { if ($dialog) {
$text = "<p>您好,我是机器人:{$data->nickname}我的机器人ID是{$data->userid}</p><p>你可以发送 <u><b>/help</b></u> 查看我支持什么命令。</p>"; $text = "<p>您好,我是机器人:{$data->nickname}我的机器人ID是{$data->userid}</p><p>你可以发送 <u><b>/help</b></u> 查看我支持什么命令。</p>";
WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $data->userid); // todo 未能在任务end事件来发送任务 WebSocketDialogMsg::sendMsg(null, $dialog->id, 'text', ['text' => $text], $data->userid); // todo 未能在任务end事件来发送任务

View File

@ -299,7 +299,12 @@
}, },
openDialog() { openDialog() {
this.$store.dispatch("openDialogUserid", this.userid); this.$store.dispatch("showSpinner", 600)
this.$store.dispatch("openDialogUserid", this.userid).catch(({msg}) => {
$A.modalError(msg)
}).finally(_ => {
this.$store.dispatch("hiddenSpinner")
});
}, },
onError() { onError() {

View File

@ -251,6 +251,8 @@ export default {
this.$store.dispatch("showSpinner", 600) this.$store.dispatch("showSpinner", 600)
this.$store.dispatch("openDialogUserid", userid).then(_ => { this.$store.dispatch("openDialogUserid", userid).then(_ => {
this.$emit("on-close") this.$emit("on-close")
}).catch(({msg}) => {
$A.modalError(msg)
}).finally(_ => { }).finally(_ => {
this.openIng = false this.openIng = false
this.$store.dispatch("hiddenSpinner") this.$store.dispatch("hiddenSpinner")

View File

@ -39,6 +39,8 @@ export default {
this.$store.dispatch("showSpinner", 600) this.$store.dispatch("showSpinner", 600)
this.$store.dispatch("openDialogUserid", userid).then(_ => { this.$store.dispatch("openDialogUserid", userid).then(_ => {
this.$emit("on-close") this.$emit("on-close")
}).catch(({msg}) => {
$A.modalError(msg)
}).finally(_ => { }).finally(_ => {
this.openIng = false this.openIng = false
this.$store.dispatch("hiddenSpinner") this.$store.dispatch("hiddenSpinner")

View File

@ -504,7 +504,9 @@ export default {
// //
if ($A.isJson(dialogId) && $A.leftExists(dialogId.dialog_id, "u:")) { if ($A.isJson(dialogId) && $A.leftExists(dialogId.dialog_id, "u:")) {
this.$store.dispatch("showSpinner", 300) this.$store.dispatch("showSpinner", 300)
this.$store.dispatch("openDialogUserid", $A.leftDelete(dialogId.dialog_id, "u:")).finally(_ => { this.$store.dispatch("openDialogUserid", $A.leftDelete(dialogId.dialog_id, "u:")).catch(({msg}) => {
$A.modalError(msg)
}).finally(_ => {
this.$store.dispatch("hiddenSpinner") this.$store.dispatch("hiddenSpinner")
}) })
} else { } else {
@ -521,6 +523,8 @@ export default {
if (this.windowLarge) { if (this.windowLarge) {
this.tabActive = 'dialog'; this.tabActive = 'dialog';
} }
}).catch(({msg}) => {
$A.modalError(msg)
}).finally(_ => { }).finally(_ => {
this.$set(user, 'loading', false); this.$set(user, 'loading', false);
}); });