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

View File

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

View File

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

View File

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

View File

@ -481,37 +481,40 @@ class WebSocketDialog extends AbstractModel
/**
* 获取会员对话(没有自动创建)
* @param int $userid 会员ID
* @param int $userid2 另一个会员ID
* @param User $user 发起会话的会员
* @param int $receiver 另一个会员ID
* @return self|null
*/
public static function checkUserDialog($userid, $userid2)
public static function checkUserDialog($user, $receiver)
{
if ($userid == $userid2) {
$userid2 = 0;
if ($user->userid == $receiver) {
$receiver = 0;
}
$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 u2', 'web_socket_dialogs.id', '=', 'u2.dialog_id')
->where('u1.userid', $userid)
->where('u2.userid', $userid2)
->where('u1.userid', $user->userid)
->where('u2.userid', $receiver)
->where('web_socket_dialogs.type', 'user')
->first();
if ($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([
'type' => 'user',
]);
$dialog->save();
WebSocketDialogUser::createInstance([
'dialog_id' => $dialog->id,
'userid' => $userid,
'userid' => $user->userid,
])->save();
WebSocketDialogUser::createInstance([
'dialog_id' => $dialog->id,
'userid' => $userid2,
'userid' => $receiver,
])->save();
return $dialog;
});

View File

@ -367,12 +367,12 @@ class WebSocketDialogMsg extends AbstractModel
* 转发消息
* @param array|int $dialogids
* @param array|int $userids
* @param int $sender 发送的会员ID
* @param User $user 发送的会员
* @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'));
$msgs = [];
$already = [];
@ -381,7 +381,7 @@ class WebSocketDialogMsg extends AbstractModel
$dialogids = [$dialogids];
}
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)) {
$msgs[] = $res['data'];
$already[] = $dialogid;
@ -396,9 +396,9 @@ class WebSocketDialogMsg extends AbstractModel
if (!User::whereUserid($userid)->exists()) {
continue;
}
$dialog = WebSocketDialog::checkUserDialog($sender, $userid);
$dialog = WebSocketDialog::checkUserDialog($user, $userid);
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)) {
$msgs[] = $res['data'];
}

View File

@ -150,7 +150,7 @@ class BotReceiveMsgTask extends AbstractTask
$notice = "创建失败。";
break;
}
$dialog = WebSocketDialog::checkUserDialog($data->userid, $msg->userid);
$dialog = WebSocketDialog::checkUserDialog($data, $msg->userid);
if ($dialog) {
$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事件来发送任务

View File

@ -299,7 +299,12 @@
},
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() {

View File

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

View File

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

View File

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