Skip to content

Commit bf9ba69

Browse files
committed
Fixes velopert#68
1 parent fb24ff8 commit bf9ba69

File tree

3 files changed

+41
-10
lines changed

3 files changed

+41
-10
lines changed

velog-backend/src/router/series/series.ctrl.js

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,14 @@ export const getSeries = async (ctx: Context) => {
241241
});
242242
serialized.posts = seriesPosts.map(p => ({
243243
index: p.index,
244-
...pick(p.post, ['id', 'thumbnail', 'title', 'released_at', 'meta', 'url_slug']),
244+
...pick(p.post, [
245+
'id',
246+
'thumbnail',
247+
'title',
248+
'released_at',
249+
'meta',
250+
'url_slug',
251+
]),
245252
body: formatShortDescription(p.post.body),
246253
}));
247254
ctx.body = serialized;
@@ -294,6 +301,11 @@ export const updateSeries = async (ctx: Context) => {
294301
if (!validateSchema(ctx, seriesSchema)) {
295302
return;
296303
}
304+
305+
if (!ctx.user) {
306+
ctx.status = 401;
307+
return;
308+
}
297309
const {
298310
name, description, url_slug, posts, thumbnail,
299311
} = (ctx.request
@@ -308,6 +320,12 @@ export const updateSeries = async (ctx: Context) => {
308320

309321
// check url_slug duplicates
310322
const { series } = ctx.state;
323+
324+
if (series.fk_user_id !== ctx.user.id) {
325+
ctx.status = 403;
326+
return;
327+
}
328+
311329
try {
312330
if (url_slug !== series.url_slug) {
313331
// check duplicates
@@ -360,11 +378,19 @@ export const updateSeries = async (ctx: Context) => {
360378

361379
export const deleteSeries = async (ctx: Context) => {
362380
const { series } = ctx.state;
381+
if (!ctx.user) {
382+
ctx.status = 401;
383+
return;
384+
}
363385
try {
364386
if (!series) {
365387
ctx.status = 404;
366388
return;
367389
}
390+
if (series.fk_user_id !== ctx.user.id) {
391+
ctx.status = 403;
392+
return;
393+
}
368394
await series.destroy();
369395
ctx.status = 204;
370396
} catch (e) {

velog-frontend/src/components/series/SeriesViewer/SeriesViewer.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,21 @@ import SeriesPostItem from '../SeriesPostItem/SeriesPostItem';
66

77
type Props = {
88
series: SeriesData,
9+
ownSeries: boolean,
910
onEnableEditing: () => void,
1011
};
11-
const SeriesViewer = ({ series, onEnableEditing }: Props) => {
12+
const SeriesViewer = ({ series, onEnableEditing, ownSeries }: Props) => {
1213
return (
1314
<div className="SeriesViewer">
1415
<h1>{series.name}</h1>
15-
<div className="manage">
16-
<button className="text-btn" onClick={onEnableEditing}>
17-
수정
18-
</button>
19-
<button className="text-btn">삭제</button>
20-
</div>
16+
{ownSeries && (
17+
<div className="manage">
18+
<button className="text-btn" onClick={onEnableEditing}>
19+
수정
20+
</button>
21+
<button className="text-btn">삭제</button>
22+
</div>
23+
)}
2124
<div className="list">
2225
{series.posts.map(p => (
2326
<SeriesPostItem key={p.id} post={p} username={series.user.username} />

velog-frontend/src/containers/series/SeriesContainer.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ type Props = {
1313
series: ?SeriesData,
1414
editing: boolean,
1515
shouldCancel: boolean,
16+
currentUsername: ?string,
1617
} & ContextRouter;
1718

1819
class SeriesContainer extends Component<Props> {
@@ -65,7 +66,7 @@ class SeriesContainer extends Component<Props> {
6566
}
6667

6768
render() {
68-
const { series, editing } = this.props;
69+
const { series, editing, currentUser } = this.props;
6970
if (!series) return null;
7071

7172
return (
@@ -77,7 +78,7 @@ class SeriesContainer extends Component<Props> {
7778
onUpdate={this.updateSeries}
7879
/>
7980
) : (
80-
<SeriesViewer series={series} onEnableEditing={this.enableEditing} />
81+
<SeriesViewer series={series} onEnableEditing={this.enableEditing} ownSeries={currentUser === series.user.username}>
8182
)}
8283
</SeriesTemplate>
8384
);
@@ -89,5 +90,6 @@ export default withRouter(
8990
series: state.series.series,
9091
editing: state.series.editing,
9192
shouldCancel: state.common.ssr && !state.common.router.altered,
93+
currentUsername: state.user.user && state.user.user.username,
9294
}))(SeriesContainer),
9395
);

0 commit comments

Comments
 (0)