1+ const jwt = require ( "jsonwebtoken" ) ;
2+ const config = require ( "../config/auth.config" ) ;
3+ const db = require ( "../Modules" ) ;
4+ const User = db . user ;
5+ const Role = db . role ;
6+
7+
8+ verifyToken = ( req , res , next ) => {
9+ let token = req . headers [ "x-access-token" ] ;
10+
11+ if ( ! token ) {
12+ return res . status ( 403 ) . send ( { message : "No token provided!" } ) ;
13+ }
14+
15+ jwt . verify ( token , config . secret , ( err , decoded ) => {
16+ if ( err ) {
17+ return res . status ( 401 ) . send ( { message : "Unauthorized!" } ) ;
18+ }
19+ req . userId = decoded . id ;
20+ next ( ) ;
21+ } ) ;
22+ } ;
23+
24+ isAdmin = ( req , res , next ) => {
25+ User . findById ( req . userId ) . exec ( ( err , user ) => {
26+ if ( err ) {
27+ res . status ( 500 ) . send ( { message : err } ) ;
28+ return ;
29+ }
30+
31+ Role . find (
32+ {
33+ _id : { $in : user . roles }
34+ } ,
35+ ( err , roles ) => {
36+ if ( err ) {
37+ res . status ( 500 ) . send ( { message : err } ) ;
38+ return ;
39+ }
40+
41+ for ( let i = 0 ; i < roles . length ; i ++ ) {
42+ if ( roles [ i ] . name === "admin" ) {
43+ next ( ) ;
44+ return ;
45+ }
46+ }
47+
48+ res . status ( 403 ) . send ( { message : "Require Admin Role!" } ) ;
49+ return ;
50+ }
51+ ) ;
52+ } ) ;
53+ } ;
54+
55+ isManager = ( req , res , next ) => {
56+ User . findById ( req . userId ) . exec ( ( err , user ) => {
57+ if ( err ) {
58+ res . status ( 500 ) . send ( { message : err } ) ;
59+ return ;
60+ }
61+
62+ Role . find (
63+ {
64+ _id : { $in : user . roles }
65+ } ,
66+ ( err , roles ) => {
67+ if ( err ) {
68+ res . status ( 500 ) . send ( { message : err } ) ;
69+ return ;
70+ }
71+
72+ for ( let i = 0 ; i < roles . length ; i ++ ) {
73+ if ( roles [ i ] . name === "manager" ) {
74+ next ( ) ;
75+ return ;
76+ }
77+ }
78+
79+ res . status ( 403 ) . send ( { message : "Require Manager Role!" } ) ;
80+ return ;
81+ }
82+ ) ;
83+ } ) ;
84+ } ;
85+
86+ isTeacher = ( req , res , next ) => {
87+ User . findById ( req . userId ) . exec ( ( err , user ) => {
88+ if ( err ) {
89+ res . status ( 500 ) . send ( { message : err } ) ;
90+ return ;
91+ }
92+
93+ Role . find (
94+ {
95+ _id : { $in : user . roles }
96+ } ,
97+ ( err , roles ) => {
98+ if ( err ) {
99+ res . status ( 500 ) . send ( { message : err } ) ;
100+ return ;
101+ }
102+
103+ for ( let i = 0 ; i < roles . length ; i ++ ) {
104+ if ( roles [ i ] . name === "teacher" ) {
105+ next ( ) ;
106+ return ;
107+ }
108+ }
109+
110+ res . status ( 403 ) . send ( { message : "Require Teacher Role!" } ) ;
111+ return ;
112+ }
113+ ) ;
114+ } ) ;
115+ } ;
116+
117+ isStudent = ( req , res , next ) => {
118+ User . findById ( req . userId ) . exec ( ( err , user ) => {
119+ if ( err ) {
120+ res . status ( 500 ) . send ( { message : err } ) ;
121+ return ;
122+ }
123+
124+ Role . find (
125+ {
126+ _id : { $in : user . roles }
127+ } ,
128+ ( err , roles ) => {
129+ if ( err ) {
130+ res . status ( 500 ) . send ( { message : err } ) ;
131+ return ;
132+ }
133+
134+ for ( let i = 0 ; i < roles . length ; i ++ ) {
135+ if ( roles [ i ] . name === "student" ) {
136+ next ( ) ;
137+ return ;
138+ }
139+ }
140+
141+ res . status ( 403 ) . send ( { message : "Require Student Role!" } ) ;
142+ return ;
143+ }
144+ ) ;
145+ } ) ;
146+ } ;
147+ const authJwt = {
148+ verifyToken,
149+ isAdmin,
150+ isStudent,
151+ isTeacher,
152+ isManager
153+ } ;
154+ module . exports = authJwt ;
0 commit comments