Skip to content

Commit c2bc95c

Browse files
committed
bugfix: share api bug fix
1 parent 7e5b7e3 commit c2bc95c

File tree

1 file changed

+47
-7
lines changed

1 file changed

+47
-7
lines changed

server/src/main/java/datart/server/service/impl/ShareServiceImpl.java

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import datart.core.data.provider.Dataframe;
3131
import datart.core.entity.*;
3232
import datart.core.mappers.ext.ShareMapperExt;
33+
import datart.core.mappers.ext.UserMapperExt;
34+
import datart.security.base.PasswordToken;
3335
import datart.security.base.ResourceType;
3436
import datart.security.exception.PermissionDeniedException;
3537
import datart.security.util.AESUtil;
@@ -63,16 +65,20 @@ public class ShareServiceImpl extends BaseService implements ShareService {
6365

6466
private final RoleService roleService;
6567

68+
private final UserMapperExt userMapperExt;
69+
6670
public ShareServiceImpl(DataProviderService dataProviderService,
6771
VizService vizService,
6872
DownloadService downloadService,
6973
ShareMapperExt shareMapper,
70-
RoleService roleService) {
74+
RoleService roleService,
75+
UserMapperExt userMapperExt) {
7176
this.dataProviderService = dataProviderService;
7277
this.vizService = vizService;
7378
this.downloadService = downloadService;
7479
this.shareMapper = shareMapper;
7580
this.roleService = roleService;
81+
this.userMapperExt = userMapperExt;
7682
}
7783

7884
@Override
@@ -353,28 +359,47 @@ private void authenticationShare(Share share, ShareToken shareToken) {
353359
}
354360
break;
355361
case LOGIN:
362+
363+
// 验证用户是否存在
364+
User user = null;
356365
if (StringUtils.isBlank(shareToken.getUsername())) {
357366
try {
358-
User currentUser = getSecurityManager().getCurrentUser();
359-
if (currentUser != null) {
360-
shareToken.setUsername(currentUser.getUsername());
361-
return;
367+
user = getSecurityManager().getCurrentUser();
368+
if (user != null) {
369+
shareToken.setUsername(user.getUsername());
370+
shareToken.setPassword(user.getPassword());
362371
} else {
363372
Exceptions.tr(BaseException.class, "message.share.permission.denied");
364373
}
365374
} catch (Exception ignored) {
366375
Exceptions.tr(BaseException.class, "message.share.permission.denied");
367376
}
377+
} else {
378+
user = userMapperExt.selectByNameOrEmail(shareToken.getUsername());
379+
}
380+
if (user == null) {
381+
Exceptions.tr(BaseException.class, "message.user.not.exists");
382+
}
383+
// 验证用户是否具有访问权限
384+
if (ShareRowPermissionBy.CREATOR.name().equals(share.getRowPermissionBy())) {
385+
return;
368386
}
369-
if (!getSecurityManager().validateUser(shareToken.getUsername(), shareToken.getPassword())) {
387+
getSecurityManager().login(new PasswordToken(shareToken.getUsername(), shareToken.getPassword(), System.currentTimeMillis()));
388+
if (getSecurityManager().isOrgOwner(share.getOrgId())) {
389+
return;
390+
}
391+
try {
392+
checkVizReadPermission(ResourceType.valueOf(share.getVizType()), share.getVizId());
393+
return;
394+
} catch (PermissionDeniedException e) {
370395
Exceptions.tr(BaseException.class, "message.share.permission.denied");
371396
}
372397
if (StringUtils.isBlank(shareToken.getUsername())
373398
|| StringUtils.isBlank(shareToken.getUsername())
374399
|| StringUtils.isBlank(share.getRoles())) {
375400
Exceptions.tr(BaseException.class, "message.share.permission.denied");
376401
}
377-
List<Role> roles = roleService.listUserRoles(share.getOrgId(), shareToken.getUsername());
402+
List<Role> roles = roleService.listUserRoles(share.getOrgId(), user.getId());
378403
if (CollectionUtils.isEmpty(roles)) {
379404
Exceptions.tr(BaseException.class, "message.share.permission.denied");
380405
}
@@ -409,6 +434,21 @@ private void validateShareParam(ShareCreateParam createParam) {
409434
}
410435
}
411436

437+
private void checkVizReadPermission(ResourceType vizType, String vizId) {
438+
switch (vizType) {
439+
case DASHBOARD:
440+
retrieve(vizId, Dashboard.class, true);
441+
break;
442+
case DATACHART:
443+
retrieve(vizId, Datachart.class, true);
444+
break;
445+
case STORYBOARD:
446+
retrieve(vizId, Storyboard.class, true);
447+
default:
448+
Exceptions.tr(BaseException.class, "message.share.unsupported", vizType.name());
449+
}
450+
}
451+
412452
private ShareAuthorizedToken parseToken(ShareToken shareToken) {
413453
ShareAuthorizedToken authorizedToken = null;
414454
if (StringUtils.isBlank(shareToken.getAuthorizedToken())) {

0 commit comments

Comments
 (0)