Skip to content

Commit 85a9683

Browse files
committed
implemented authorization checks
1 parent 4ba74f9 commit 85a9683

File tree

9 files changed

+102
-73
lines changed

9 files changed

+102
-73
lines changed

src/actions/authAction.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ export const loginUser = (userInfo, history) => async (dispatch) => {
5656
// update user role in localStorage
5757
localStorage.setItem('admin', res.data.user.isAdmin)
5858

59+
// update user role in localStorage
60+
localStorage.setItem('ticketModerator', res.data.user.isTicketsModerator)
61+
5962
// store orgId in localStorage
6063
localStorage.setItem('orgId', res.data.user.orgId);
6164

src/user/Admin/Tickets/TicketDiscussion/Discussion/Discussion.js

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class Discussion extends Component {
4747
editer: "new",
4848
content: "",
4949
},
50-
async () => await this.props.updateTicket({type: "content", content })
50+
async () => await this.props.updateTicket({ type: "content", content })
5151
);
5252
};
5353

@@ -89,19 +89,22 @@ class Discussion extends Component {
8989
<Image src={userIcon2} alt="icon" rounded roundedCircle />
9090
</div>
9191
<div className="img-desc">
92-
<div style={{display: "flex", justifyContent: "space-between"}}>
92+
<div
93+
style={{ display: "flex", justifyContent: "space-between" }}
94+
>
9395
<div>
9496
<div style={{ display: "flex", alignItems: "center" }}>
9597
<h2>{this.props.ticket.createdBy.name}</h2>
96-
{this.state.editer === "new" && (
97-
<EditButton
98-
style={{
99-
color: "rgba(0,0,0,0.5)",
100-
fontSize: "18px",
101-
}}
102-
onClick={this.handleEditTicket}
103-
/>
104-
)}
98+
{this.state.editer === "new" &&
99+
this.props.editsAllowed && (
100+
<EditButton
101+
style={{
102+
color: "rgba(0,0,0,0.5)",
103+
fontSize: "18px",
104+
}}
105+
onClick={this.handleEditTicket}
106+
/>
107+
)}
105108
</div>
106109
<div className="discussion-date">
107110
<Moment format="DD MMM YYYY">

src/user/Admin/Tickets/TicketDiscussion/Layout/EditableCard.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ class EditableCard extends Component {
3131
type: "shortDescription",
3232
shortDescription: this.state.data,
3333
});
34-
this.props.singleUpdate(this.props.ticketId, { shortDescription: this.state.data });
34+
this.props.singleUpdate(this.props.ticketId, {
35+
shortDescription: this.state.data,
36+
});
3537
});
3638
};
3739

@@ -40,7 +42,9 @@ class EditableCard extends Component {
4042
<Card className="info-card">
4143
<div className="info-title">
4244
<span>{this.props.heading}</span>
43-
{!this.state.editor && <EditButton onClick={this.toggleEditor} />}
45+
{!this.state.editor && this.props.editsAllowed && (
46+
<EditButton onClick={this.toggleEditor} />
47+
)}
4448
{this.state.editor && (
4549
<div className="buttons">
4650
<CancelButton

src/user/Admin/Tickets/TicketDiscussion/Layout/Info.js

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -78,33 +78,37 @@ class Info extends Component {
7878
<div className="data-element" style={{ display: "flex" }}>
7979
<span className="data-title">Status:</span>
8080
<span className="data-desc">
81-
<DropdownButton
82-
variant="light"
83-
title={<BadgeElement ticketState={this.state.selected} />}
84-
size="sm"
85-
>
86-
{["OPEN", "CLOSED", "PENDING", "SOLVED", "ON_HOLD"].map(
87-
(ele, index) => (
88-
<Dropdown.Item
89-
key={index}
90-
style={{ display: "flex" }}
91-
onClick={() => this.setSelected(ele)}
92-
>
93-
{
94-
<CheckOutlinedIcon
95-
style={{
96-
color:
97-
ele === this.state.selected
98-
? "rgba(0, 0, 0, 0.5)"
99-
: "#ffffff",
100-
}}
101-
/>
102-
}
103-
<BadgeElement ticketState={ele} />
104-
</Dropdown.Item>
105-
)
106-
)}
107-
</DropdownButton>
81+
{this.props.editsAllowed ? (
82+
<DropdownButton
83+
variant="light"
84+
title={<BadgeElement ticketState={this.state.selected} />}
85+
size="sm"
86+
>
87+
{["OPEN", "CLOSED", "PENDING", "SOLVED", "ON_HOLD"].map(
88+
(ele, index) => (
89+
<Dropdown.Item
90+
key={index}
91+
style={{ display: "flex" }}
92+
onClick={() => this.setSelected(ele)}
93+
>
94+
{
95+
<CheckOutlinedIcon
96+
style={{
97+
color:
98+
ele === this.state.selected
99+
? "rgba(0, 0, 0, 0.5)"
100+
: "#ffffff",
101+
}}
102+
/>
103+
}
104+
<BadgeElement ticketState={ele} />
105+
</Dropdown.Item>
106+
)
107+
)}
108+
</DropdownButton>
109+
) : (
110+
<BadgeElement ticketState={this.props.ticket.status} />
111+
)}
108112
</span>
109113
</div>
110114
</div>

src/user/Admin/Tickets/TicketDiscussion/Layout/Layout.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ import Tags from "./Tags";
33
import Title from "./Title";
44
import TicketInfo from "./Info";
55
import Members from "./Members";
6-
import Form from "react-bootstrap/Form";
76
import Card from "react-bootstrap/Card";
8-
import Badge from "react-bootstrap/Badge";
97
import Image from "react-bootstrap/Image";
108
import EditableCard from "./EditableCard";
11-
import Button from "react-bootstrap/Button";
12-
import EditButton from "@material-ui/icons/EditOutlined";
139
import userIcon2 from "../../../../../assets/images/userIcon2.jpg";
1410

1511
class Layout extends Component {
@@ -33,6 +29,7 @@ class Layout extends Component {
3329
<Title
3430
ticket={this.props.ticket}
3531
handleBack={this.props.handleBack}
32+
editsAllowed={this.props.editsAllowed}
3633
singleUpdate={this.props.singleUpdate}
3734
updateTicket={this.props.updateTicket}
3835
/>
@@ -64,13 +61,15 @@ class Layout extends Component {
6461
<div className="ticket-info">
6562
<TicketInfo
6663
ticket={this.props.ticket}
64+
editsAllowed={this.props.editsAllowed}
6765
singleUpdate={this.props.singleUpdate}
6866
updateTicket={this.props.updateTicket}
6967
/>
7068
<EditableCard
7169
Type="Summary"
7270
heading="Ticket Summary"
7371
ticketId={this.props.ticket._id}
72+
editsAllowed={this.props.editsAllowed}
7473
singleUpdate={this.props.singleUpdate}
7574
updateTicket={this.props.updateTicket}
7675
data={this.props.ticket.shortDescription}
@@ -94,6 +93,7 @@ class Layout extends Component {
9493
addTag={this.props.addTag}
9594
data={this.props.ticket.tags}
9695
removeTag={this.props.removeTag}
96+
editsAllowed={this.props.editsAllowed}
9797
/>
9898
<Members ticket={this.props.ticket} />
9999
</div>

src/user/Admin/Tickets/TicketDiscussion/Layout/Tags.js

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class Tags extends Component {
1515
evt.preventDefault();
1616
this.props.addTag(evt.target[0].value);
1717
console.log(evt.target[0].value);
18-
evt.target[0].value = ""
18+
evt.target[0].value = "";
1919
};
2020
render() {
2121
console.log(this.props.data);
@@ -28,25 +28,36 @@ class Tags extends Component {
2828
<div className="data-element">
2929
<span className="data-desc">
3030
{this.props.data.map((ele, index) => (
31-
<Badge pill variant="info" style={{ fontSize: "13px", margin: "2px" }}>
31+
<Badge
32+
pill
33+
variant="info"
34+
style={{ fontSize: "13px", margin: "2px" }}
35+
>
3236
<span style={{ verticalAlign: "middle" }}>{ele}</span>
33-
<CancelButton onClick={() => this.props.removeTag(ele)}/>
37+
{this.props.editsAllowed && (
38+
<CancelButton
39+
style={{ cursor: "pointer" }}
40+
onClick={() => this.props.removeTag(ele)}
41+
/>
42+
)}
3443
</Badge>
3544
))}
3645
</span>
37-
<span className="data-desc">
38-
<Form
39-
onSubmit={this.addTag}
40-
style={{ display: "flex", marginTop: "10px" }}
41-
>
42-
<Form.Group>
43-
<Form.Control type="text" placeholder="Tag Name" />
44-
</Form.Group>
45-
<Button variant="light" type="submit">
46-
Add
47-
</Button>
48-
</Form>
49-
</span>
46+
{this.props.editsAllowed && (
47+
<span className="data-desc">
48+
<Form
49+
onSubmit={this.addTag}
50+
style={{ display: "flex", marginTop: "10px" }}
51+
>
52+
<Form.Group>
53+
<Form.Control type="text" placeholder="Tag Name" />
54+
</Form.Group>
55+
<Button variant="light" type="submit">
56+
Add
57+
</Button>
58+
</Form>
59+
</span>
60+
)}
5061
</div>
5162
</div>
5263
</Card>

src/user/Admin/Tickets/TicketDiscussion/Layout/Title.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,18 @@ class Title extends Component {
5555
{this.props.ticket.title}
5656
</span>
5757
</dv>
58-
<EditButton onClick={this.toggleEditor} />
58+
{this.props.editsAllowed && (
59+
<EditButton onClick={this.toggleEditor} />
60+
)}
5961
</React.Fragment>
6062
)}
6163
{this.state.editor && (
6264
<Form style={{ display: "flex", width: "100%" }}>
63-
<Form.Control type="text" onChange={this.setTitle} value={this.state.title} />
65+
<Form.Control
66+
type="text"
67+
onChange={this.setTitle}
68+
value={this.state.title}
69+
/>
6470
<Button
6571
variant="light"
6672
onClick={this.toggleEditor}

src/user/Admin/Tickets/TicketDiscussion/TicketDiscussions.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,12 @@ class TicketDiscussions extends Component {
3232
getTicket = async () => {
3333
const ticket = (
3434
await Axios.get(`${BASE_URL}/ticket/${this.props.ticketId}`)
35-
).data;
36-
this.setState({ ticket: ticket.ticket });
35+
).data.ticket;
36+
this.editsAllowed =
37+
localStorage.getItem("ticketModerator") === "true" ||
38+
localStorage.getItem("admin") === "true" ||
39+
localStorage.getItem("userId") === ticket.createdBy.id;
40+
this.setState({ ticket: ticket });
3741
};
3842

3943
componentDidMount() {
@@ -59,12 +63,6 @@ class TicketDiscussions extends Component {
5963
});
6064
};
6165

62-
// setTicketContent = (content) => {
63-
// this.setState({
64-
// ticket: { ...this.state.ticket, content: content },
65-
// });
66-
// };
67-
6866
handleUpdateTicket = async (updates) => {
6967
try {
7068
const newTicket = (
@@ -125,7 +123,6 @@ class TicketDiscussions extends Component {
125123
};
126124

127125
render() {
128-
// console.log(this.state.ticket);
129126
return (
130127
<>
131128
{this.state.ticket && (
@@ -135,6 +132,7 @@ class TicketDiscussions extends Component {
135132
addTag={this.handleAddTag}
136133
handleBack={this.handleBack}
137134
removeTag={this.handleDeleteTag}
135+
editsAllowed={this.editsAllowed}
138136
updateTicket={this.handleUpdateTicket}
139137
singleUpdate={this.props.singleUpdate}
140138
handleViewChange={this.handleViewChange}
@@ -143,8 +141,8 @@ class TicketDiscussions extends Component {
143141
<Disscussion
144142
ticket={this.state.ticket}
145143
sendComment={this.sendComment}
144+
editsAllowed={this.editsAllowed}
146145
updateTicket={this.handleUpdateTicket}
147-
// setTicketContent={this.setTicketContent}
148146
/>
149147
)}
150148
{this.state.view === "history" && (

src/user/Admin/Tickets/socket.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export const setUpSocket = (state, donutIcon, addToNotification) => {
1414
addToNotification(notificationToAdd);
1515
}
1616
} else if (notification.for === "moderator") {
17-
if (localStorage.getItem("moderator")?.toString() === "true") {
17+
if (localStorage.getItem("ticketModerator").toString() === "true") {
1818
addToNotification(notificationToAdd);
1919
}
2020
} else {

0 commit comments

Comments
 (0)