Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
canifa_note
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Hoàng Anh
canifa_note
Commits
7a9f6196
Commit
7a9f6196
authored
Sep 02, 2024
by
johnnyjoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: allow admin users to update other memos
parent
8c6682bd
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
10 additions
and
3 deletions
+10
-3
memo_service.go
server/router/api/v1/memo_service.go
+8
-2
MemoView.tsx
web/src/components/MemoView.tsx
+2
-1
No files found.
server/router/api/v1/memo_service.go
View file @
7a9f6196
...
@@ -225,7 +225,8 @@ func (s *APIV1Service) UpdateMemo(ctx context.Context, request *v1pb.UpdateMemoR
...
@@ -225,7 +225,8 @@ func (s *APIV1Service) UpdateMemo(ctx context.Context, request *v1pb.UpdateMemoR
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get current user"
)
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get current user"
)
}
}
if
memo
.
CreatorID
!=
user
.
ID
{
// Only the creator or admin can update the memo.
if
memo
.
CreatorID
!=
user
.
ID
&&
!
isSuperUser
(
user
)
{
return
nil
,
status
.
Errorf
(
codes
.
PermissionDenied
,
"permission denied"
)
return
nil
,
status
.
Errorf
(
codes
.
PermissionDenied
,
"permission denied"
)
}
}
...
@@ -336,7 +337,8 @@ func (s *APIV1Service) DeleteMemo(ctx context.Context, request *v1pb.DeleteMemoR
...
@@ -336,7 +337,8 @@ func (s *APIV1Service) DeleteMemo(ctx context.Context, request *v1pb.DeleteMemoR
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get current user"
)
return
nil
,
status
.
Errorf
(
codes
.
Internal
,
"failed to get current user"
)
}
}
if
memo
.
CreatorID
!=
user
.
ID
{
// Only the creator or admin can update the memo.
if
memo
.
CreatorID
!=
user
.
ID
&&
!
isSuperUser
(
user
)
{
return
nil
,
status
.
Errorf
(
codes
.
PermissionDenied
,
"permission denied"
)
return
nil
,
status
.
Errorf
(
codes
.
PermissionDenied
,
"permission denied"
)
}
}
...
@@ -1167,3 +1169,7 @@ func substring(s string, length int) string {
...
@@ -1167,3 +1169,7 @@ func substring(s string, length int) string {
return
s
[
:
byteIndex
]
return
s
[
:
byteIndex
]
}
}
func
isSuperUser
(
user
*
store
.
User
)
bool
{
return
user
.
Role
==
store
.
RoleAdmin
||
user
.
Role
==
store
.
RoleHost
}
web/src/components/MemoView.tsx
View file @
7a9f6196
...
@@ -8,6 +8,7 @@ import useNavigateTo from "@/hooks/useNavigateTo";
...
@@ -8,6 +8,7 @@ import useNavigateTo from "@/hooks/useNavigateTo";
import
{
useUserStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
useUserStore
,
useWorkspaceSettingStore
}
from
"@/store/v1"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
MemoRelation_Type
}
from
"@/types/proto/api/v1/memo_relation_service"
;
import
{
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
Memo
,
Visibility
}
from
"@/types/proto/api/v1/memo_service"
;
import
{
User_Role
}
from
"@/types/proto/api/v1/user_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceMemoRelatedSetting
}
from
"@/types/proto/api/v1/workspace_setting_service"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
WorkspaceSettingKey
}
from
"@/types/proto/store/workspace_setting"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
import
{
useTranslate
}
from
"@/utils/i18n"
;
...
@@ -53,7 +54,7 @@ const MemoView: React.FC<Props> = (props: Props) => {
...
@@ -53,7 +54,7 @@ const MemoView: React.FC<Props> = (props: Props) => {
(
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
COMMENT
&&
relation
.
relatedMemo
===
memo
.
name
,
(
relation
)
=>
relation
.
type
===
MemoRelation_Type
.
COMMENT
&&
relation
.
relatedMemo
===
memo
.
name
,
).
length
;
).
length
;
const
relativeTimeFormat
=
Date
.
now
()
-
memo
.
displayTime
!
.
getTime
()
>
1000
*
60
*
60
*
24
?
"datetime"
:
"auto"
;
const
relativeTimeFormat
=
Date
.
now
()
-
memo
.
displayTime
!
.
getTime
()
>
1000
*
60
*
60
*
24
?
"datetime"
:
"auto"
;
const
readonly
=
memo
.
creator
!==
user
?.
name
;
const
readonly
=
memo
.
creator
!==
user
?.
name
&&
user
.
role
===
User_Role
.
USER
;
const
isInMemoDetailPage
=
location
.
pathname
.
startsWith
(
`/m/
${
memo
.
uid
}
`
);
const
isInMemoDetailPage
=
location
.
pathname
.
startsWith
(
`/m/
${
memo
.
uid
}
`
);
// Initial related data: creator.
// Initial related data: creator.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment