How To Manage User Roles In Node.js

Поділитися
Вставка
  • Опубліковано 11 січ 2025

КОМЕНТАРІ • 296

  • @hnasr
    @hnasr 4 роки тому +246

    Legend! Love the way you clearly explain these concepts in a simple way. Cheers bro. You are on my recommended channel list on my YT

    • @AmanNidhi
      @AmanNidhi 4 роки тому +9

      i recommend you both on mine

    • @neon13x
      @neon13x 3 роки тому +8

      Legend praising another legend

    • @kartikjha833
      @kartikjha833 3 роки тому +2

      This comment section is pretty legendary

    • @JD-hq1kn
      @JD-hq1kn Рік тому

      Ok

  • @cdporgrammer7168
    @cdporgrammer7168 4 роки тому +139

    Man I wonder if Kyle actually realises how much he helps us out with his vids man
    Respect man

    • @MrEnsiferum77
      @MrEnsiferum77 4 роки тому

      React kids won't understand u...

    • @astkh4381
      @astkh4381 2 роки тому

      @@MrEnsiferum77 реакт тут причем?

  • @taquiyt
    @taquiyt 4 роки тому +133

    pretty much exactly the video I needed for a project. My man web dev simplified is a legend.

    • @cdporgrammer7168
      @cdporgrammer7168 4 роки тому +1

      You get it m8

    • @sohailkashif6992
      @sohailkashif6992 4 роки тому +1

      @@cdporgrammer7168 dear how it connect with mongodb?

    • @tyrrelldavis9919
      @tyrrelldavis9919 4 роки тому +1

      Very true.
      He is one of the few "bigger" code UA-camrs that has beneficial stuff I've used in real projects

    • @tyrrelldavis9919
      @tyrrelldavis9919 4 роки тому +1

      @@sohailkashif6992 a common cope I would get hit with in boot camp was,
      "Depends on your use case"
      Which it actually does.
      Having a hard time understanding the relationship between a user of the database
      And
      A user that is using the site.

    • @ng4logic
      @ng4logic 4 роки тому

      this dude is literally a mentor

  • @mrsmasked180
    @mrsmasked180 4 роки тому +17

    You're simply the best out there because you explain your content very well and you go straight to the point, respect man you're a legend !

  • @ayoubalem865
    @ayoubalem865 4 роки тому +21

    7:11 Th res.Status Should be 401 Not 403
    401 Means Unauthorized , Forbidden Mean He is Sign Up But he doesn't have the permission to access to the given operation.
    Thank You btw !

  • @pprathameshmore
    @pprathameshmore 4 роки тому +1

    Before watching this video, I was creating separate documents for admin and user. Thank you for such a clear explanation tutorial.

    • @sandVidz
      @sandVidz 4 роки тому +1

      I did that and submited lol. Had to pay for that in viva.

  • @eduardonunes1379
    @eduardonunes1379 4 роки тому +4

    This video is so motivating since I was taking a break from programming bc of authentication and authorization. Thank you so much!

  • @riadhossain4020
    @riadhossain4020 4 роки тому +1

    Kayel your videos are greate for intermediat developers. Clear and simple explanations. Have been following you. You are recommended.

  • @jmmacatangay_grizzlybear
    @jmmacatangay_grizzlybear 4 роки тому +1

    I always keep telling everyone to subscribe to your channel. you're really great really hoping people would recognize you more often.

  • @NorteXGame
    @NorteXGame 4 роки тому +4

    Never happier when any youtuber uploads

  • @tranquility6358
    @tranquility6358 4 роки тому +49

    I believe you mixed up the status codes a bit.
    401 Unauthorized - send this code when the user is not authorized to view the content (as in the user didn't login)
    403 Forbidden - send this code when the user is logged in, but is not allowed to view specific content
    The difference between these status codes is that 401 should be sent if authorization fails, but proper authorization is possible while 403 is sent when the user is authorized, but doesn't have the required permissions.

    • @cheetahBeachwood
      @cheetahBeachwood 4 роки тому +1

      are you sure?
      authentication means verifying identity. It gets confusing because the header used to authenticate is called 'authorization' but it is still authentication and 401.
      authorization means verifying permissions which is 403

    • @brielov
      @brielov 4 роки тому +12

      I agree... 401 is for unauthorized (not logged in) and 403 is forbidden (resource authorization)

    • @Hadermite
      @Hadermite 4 роки тому +4

      @@cheetahBeachwood Yes, he's correct. The title of the status code is a bit messed up, should probably have been "Unauthenticated" instead, it generates a lot of confusion.

    • @andrejvujic
      @andrejvujic 4 роки тому

      @Jovan Jevtic jovaneeeee

  • @pavelsokolov4190
    @pavelsokolov4190 2 роки тому +1

    Currently I'm learning MEAN and this is exactly what I need for my pet project. Thank you so much for what you're doing!

  • @T3kKeN9
    @T3kKeN9 Рік тому

    Awesome video. Concept of modularity with pure functions make this truly scalable.

  • @ridl27
    @ridl27 4 роки тому +12

    such a clear explanation, thank you!

  • @swibay
    @swibay 4 роки тому +1

    My name is Kyle and my job is to simplify the web for you!
    Your tutorials are always gre8!

  • @kmparkhu
    @kmparkhu 4 роки тому +1

    Yay!!!!!!!!!!!!!!!!!!! So awesome!!! Thank you !!!! I was just thinking about this because I been following your other tutorials and I love them. I am excited to watch this video.

  • @LabhamJain
    @LabhamJain 4 роки тому +1

    You've Successfully Simplified Web For Us. Mission Accomplished 😎

  • @evanmcdaniel5544
    @evanmcdaniel5544 4 роки тому

    Thanks so much for this. One of the better Node tutorials I've seen.

  • @stylesoftware
    @stylesoftware 4 роки тому +1

    Awesome, helped me with some of my lingering middleware integration ignorance. Well explained!

  • @pedro_jaber9357
    @pedro_jaber9357 Рік тому

    OMG! thank you. I believe in Web Dev Simplified supremacy!!!!!

  • @taherr1341
    @taherr1341 3 роки тому

    Awesome. You are the best. I wonder who could be so unfair to dislike it?

  • @jacob.lee380
    @jacob.lee380 3 роки тому

    Every time I get stuck in something and try to solve a problem by myself. I'm always ended up on your video finding a solution

  • @ononaokisama
    @ononaokisama 3 роки тому

    Literally god tier content

  • @HurikaneTv
    @HurikaneTv 3 роки тому

    Kyle ... One Word: Genius

  • @jeffmair
    @jeffmair 4 роки тому

    Your tutorials are top notch Kyle!

  • @ginokoybi7010
    @ginokoybi7010 Рік тому +1

    Your video help me too much thanks 🙏

  • @yabu_ai
    @yabu_ai Рік тому

    This is the best video about role based authentication...Thanks

  • @feminjustin2478
    @feminjustin2478 4 роки тому

    you explain things so simply....easy to follow.....

  • @HashimWarren
    @HashimWarren 4 роки тому +1

    Love the progression in this video. Super clear

  • @jodufan8754
    @jodufan8754 3 роки тому +5

    I would recommend to assign every role an int so you can calculate up and downwards !
    Edit: To calculate the inheritance of the groups if given!

    • @montasirmahmud3585
      @montasirmahmud3585 2 роки тому

      Why ? explain briefly please..

    • @jodu
      @jodu 2 роки тому

      @@montasirmahmud3585 Then you can just use bit calculations to check if a role is hierarchically over another role or not by for example using >=

  • @adithyasanthosh30
    @adithyasanthosh30 4 роки тому

    Nice. Introductory tutorial on how to manage user roles.

  • @dthoma128
    @dthoma128 4 роки тому

    Kyle ... great tutorial ... very glad I found your channel! Thank you.

  • @harleyspeedthrust4013
    @harleyspeedthrust4013 2 роки тому +1

    I've got a permission system where the permissions are strings like "mail.create" or "mail.*". Each user has an array of permissions, and the permission strings are referenced in a POJO that maps object keys to permission names. So if you have an endpoint that should be accessible to anyone with a mail permission, you call `hasAnyPermission(req.user, Permissions.mail)` where Permissions.mail is an object containing more fine-grained permissions, and that endpoint would be accessible to anybody with a "mail.(whatever)" permission. "*" is a wildcard that refers to all sub-permissions, so if someone has the permission "*" then they're a superuser, and if they have the permission "boards.*" then they can do anything on any image board. There are some functions, like `hasAnyPermission` or `hasPermission` that you stick at the beginning of your route handler to enforce the permissions.
    Of course you don't have to put them at the beginning of your route handler - the entire frontend of the app is handlebars so I also use them on specific pages where I want to display some items/links but each link requires a separate permission. I'm actually pretty surprised that I've made it this far using only handlebars and plain JS for the frontend. The backend is NodeJS with Typescript which is great but I've managed to write a multiplayer FPS almost entirely in plain JS (server-side is that typescript nodejs I just mentioned) and build a forum engine and now I've set up a mail server and a way for users to create and manage email addresses on my domain. handlebars may not be flashy but damn if I like it

  • @joel9909
    @joel9909 4 роки тому

    Just found your channel, loving it so far.

  • @saisaske1
    @saisaske1 4 роки тому

    Just want to say thankyou man. Words are short here.

  • @rfossella
    @rfossella 4 роки тому +3

    As usual, great video - clear, concise and immediately usable. Thanks!

  • @sapnilpatel1645
    @sapnilpatel1645 2 роки тому

    Your video helps me a lot. I really appreciate your effort.
    Thank you so much!

  • @MatteoScano
    @MatteoScano 11 місяців тому

    Thank you very much. This video... no, all your videos I watched are amazing and helpfull!

  • @nitindaphale2008
    @nitindaphale2008 2 роки тому

    Very good explained , Love from India.

  • @apurvsawant5703
    @apurvsawant5703 4 роки тому

    Exactly the video I needed. Thanks man.

  • @thejasong01
    @thejasong01 4 роки тому

    YOU ARE AWESOME thankyou for putting great content, with fast but effective and SIMPLE :)

  • @williamxu2402
    @williamxu2402 3 роки тому

    Thank you very much! This is exactly what I needed for my project!

  • @Hrit
    @Hrit 2 роки тому

    Enjoyed the turotial throughly!

  • @tbg6nb
    @tbg6nb 2 дні тому

    20:31 does it make sense in practice ? I'm pretty sure an admin should have right to delete any project

  • @vinhubcompters
    @vinhubcompters 3 роки тому

    best teacher ever

  • @a1225johnny
    @a1225johnny 3 роки тому

    very clear, it’s helpful in my project. Thanks a lot

  • @coanjos
    @coanjos 4 роки тому

    This video came in the perfect time. Thank you!

  • @omar9987
    @omar9987 4 роки тому +7

    It would be awesome if you could create like a mini blog[or anything] with react & express that uses user-based roles. I'm trying to add user based rules to my react app :p

  • @virgiliogervacioestadillo1389
    @virgiliogervacioestadillo1389 3 роки тому

    Thank you so much Kyle. I found this very helpful.

  • @geld5220
    @geld5220 2 роки тому

    too good. I did a version in typescript but followed your flows. Thanks

  • @juliecherner9085
    @juliecherner9085 Рік тому

    Thank you for such an amazing tutorial!

  • @OnlyJavascript
    @OnlyJavascript Рік тому

    please make a complete node course for beginners to intermediate level and an advanced node course too. We are ready to buy it. Please vote if u guys need it too.

  • @mayank_singh_43
    @mayank_singh_43 2 роки тому

    This is what i want , u are awesome sir 🤘🤘🤘

  • @mamusthafa6
    @mamusthafa6 2 роки тому

    YOu are amazing... Really simplified complex things

  • @ayushthakur733
    @ayushthakur733 3 роки тому

    So accurate with the name web dev SIMPLIFIED

  • @smsibasish
    @smsibasish 4 роки тому +1

    Great content. Would love to see an elaborated version of this with more of a real world scenarios where an user can have multiple role for different context.

    • @WebDevSimplified
      @WebDevSimplified  4 роки тому +2

      Really all you need to do is make the user.role property an array and then check if the role is in the array or not.

    • @smsibasish
      @smsibasish 4 роки тому

      @@WebDevSimplified I feel that will create some problem. Let me explain with your example. Say I introduce two new roles project viewer and project admin. Now one user can be project viewer for one project and project admin for another. If I model my user to have an array of roles then how do I keep track of which project he is an admin of.

    • @mrviometal4948
      @mrviometal4948 4 роки тому +1

      @@smsibasish I think you can simply tie the role to the project, meaning your DB entry can look like this:
      Projects: [
      { id:1, name:"first project", userId: 1, userRole: canView},
      ...
      ]
      then you check for the user's role with its id to distinguish between what can be viewed and what can be edited, deleted or updated
      but what case should require something like that?

    • @smsibasish
      @smsibasish 4 роки тому

      @@mrviometal4948 consider this example. A user can be part of many groups and a group may contain a few user. A user can be a admin of few groups but member of other groups. In that case what should be the role of the user in User model and should the Group model have the admin and member fields separately.

    • @mrviometal4948
      @mrviometal4948 4 роки тому +1

      @@smsibasish I see, I think it can be solved by an abstraction between admin and view. i.e. any admin can view, but not any viewer can be an admin. And so, the edit and delete have to be from an admin or the respective user of the project. But the project entries can contain an array of users who can view...i.e. =>
      Projects: [
      { id:1, name:"first project", userId: 1, usersWhoCanView: [2,3,4,5...]},
      ...
      ]
      so in the implementation of the can view, we can look up the array if it contains the signed-in user's id. In this case, those who can view are (Admins, People who create the project i.e. userId, and any user in the array)
      Does that make sense?

  • @RuiLopesFR
    @RuiLopesFR 3 роки тому

    Nice one - Just for the sake of DRY : scopedProjects = (user, projects) => projects.filter(project => canViewProject(user, project))

  • @omrimaher2754
    @omrimaher2754 2 роки тому

    Really amazing explanation!

  • @BBI-Brandboost
    @BBI-Brandboost 4 роки тому

    Thanks for sharing, it is nice and easy to follow which is a massive help.

  • @danial9864
    @danial9864 3 роки тому

    Thank you so much for the tutorial video it's quite informative and professional

  • @thedevlife
    @thedevlife 4 роки тому +1

    Great content. Gives motivation to keep our channel going.

  • @larita182-x1k
    @larita182-x1k 3 роки тому

    THANK YOUUUUUUUUUUU!!!!!! I finally understand this.

  • @TheBabelian
    @TheBabelian 2 роки тому

    wow! such a great tutorial. thanks for the guide!

  • @indigosay
    @indigosay 4 роки тому

    I added this video to my Gold Collection

  • @BabasolaOso
    @BabasolaOso 3 місяці тому

    I love you and PedroTech, both kinda feel alike to me

  • @iurii7752
    @iurii7752 4 роки тому

    The best educational videos

  • @bulldog2024
    @bulldog2024 3 роки тому +1

    You could have a super admin that would have the ability to delete any project. If an employee is no longer working for the company, you might want to have someone either delete that employee's project or reassign them to another user to complete.

  • @edisvelicanin8854
    @edisvelicanin8854 4 роки тому

    exactly what i was looking for

  • @dpolo567
    @dpolo567 2 роки тому +1

    Thanks for the great tutorial. In the end, I'm just wondering (if we work with real data obtained from the database), what is the best way to filter the data (in this case the scopedProjects function).
    If we have a lot of data, in this case we need to fetch all of them and then filter them. Isn't it better (in terms of performance) to check the role first and then pull only specific (filtered on db query level) data from the database?

  • @nirmesh44
    @nirmesh44 4 роки тому

    Perfect. Very nicely done

  • @medAmineRg
    @medAmineRg 2 роки тому

    that was a great video thankyou so much!

  • @pankaj_9998
    @pankaj_9998 3 роки тому

    Thank you. This was a great learing experience.

  • @alex_lomov
    @alex_lomov 4 роки тому

    Great layout of material.

  • @amitshrestha898
    @amitshrestha898 4 роки тому

    Found what I am looking for thanks.

  • @agasthya3693
    @agasthya3693 4 роки тому

    Hey Kayle please do video on Gulp, Grunt, webpack and parcel & when to choose which tool

  • @thinkdomotic4915
    @thinkdomotic4915 4 роки тому

    Great content, very helpful, thanks lots

  • @indigosay
    @indigosay 4 роки тому

    I was just about to look for this information

  • @benjamincisneros797
    @benjamincisneros797 4 роки тому +3

    Great video. I just think one small refactor is to use the canViewProject function inside your filter for scopedProjects

  • @nfaical3
    @nfaical3 4 роки тому

    Thank you very much , as always easy explanations.
    Please add how to protect the server from attacks like ddos and brute force attack.

  • @shuvokhan2054
    @shuvokhan2054 4 роки тому +5

    You're my boss ❤

  • @fullstackgreekdeveloper8033
    @fullstackgreekdeveloper8033 4 роки тому

    Thank you for this video!

  • @Millonerium
    @Millonerium Рік тому

    great video bro, please do a MERN project like this with frontend

  • @mallusrgreat
    @mallusrgreat 3 роки тому

    Kyle to webcam: Focus on my hair not the content

  • @user-ww6ns4hn9r
    @user-ww6ns4hn9r 2 роки тому +1

    mmh, i think there is some confusion between permissions and actually filtering the correct data. One thing is permission based on levels (the higher level, the higher the privilege to see things), and one things is to filter the correct projects for the user. wouldn't that be a filter applied at DAO level which returns the right data rather than crammining into the permissions?
    Permission after all should be agnostic to the kind of data you are handling, and should worry only about roles . correct me if I am wrong?

  • @matthewwillox7338
    @matthewwillox7338 4 роки тому +3

    Roles are ok, but they need to be predefined and are somewhat rigid. Most systems need a level of granularity.
    Roles can be defined as sets of keys/tokens/ids in an array. Each permission is a GUID or some uniquely identifiable string or number.
    Instead of role === "SOME ROLE", you use permissions.includes("SOME PERMISSION")
    This can also be upgraded later to use a database table. You can have per-user permissions on just about anything in a system. You can even assign capabilities after certain tasks are completed, such as verifying an email address (now the user can create more than 3 projects) or hitting a certain threshold of positive feedback/likes (now a user is a community moderator). Variable levels of subscription billing. Pre-requisites in courseware, etc. No need to store this information as special user data.
    If it's something a user can do, make a key for it, and put it into this array. If the user can't do it. Take it out. Simple, flexible.
    You end up with the flexibility you'll need for an app to work in an enterprise environment.

  • @hiteshrane0609
    @hiteshrane0609 4 роки тому

    I like your teaching style and I got correct concept from you when I search. can you upload videos with hindi dubbing? is it possible.

  • @hindbensafi4646
    @hindbensafi4646 2 роки тому

    Thanks a lot ! great video !
    Please how can i protect my front-end routes using those APIs ?
    For example, when users login, the Admin would have route to the admin page but normal users not ? is it secure to check roles in the front-end ?

  • @tough_year
    @tough_year 4 роки тому

    Awesome video !!!

  • @sabuein
    @sabuein Рік тому

    Thank you, Kyle.

  • @houssemkhi5036
    @houssemkhi5036 3 роки тому

    great as usual

  • @talha-cs
    @talha-cs 3 роки тому

    Nicely explained

  • @maplestoryinchinese
    @maplestoryinchinese 4 роки тому +2

    More tutorials please!

  • @bunnybloods768
    @bunnybloods768 4 роки тому +3

    You are so great.can you tell me what is your main job besides youtube?

  • @aaronnolan5377
    @aaronnolan5377 3 роки тому +1

    If someone knows someone else's userId there could be problems. How do we make sure someone cant modify userId in the request?

    • @zlatan1261
      @zlatan1261 3 роки тому

      This is the question that worries me as well

    • @navan1087
      @navan1087 2 роки тому

      use jwt short lived token

  • @rishabsharma5307
    @rishabsharma5307 3 роки тому +1

    Awesome video

  • @josephlivengood4508
    @josephlivengood4508 3 роки тому

    You dont view anything in the browser? I'm using the ejs view engine and am having problems getting the ._id from mongodb to verify that the user is the owner of a post. I cannot find a work around. Maybe this would do it 🤔

  • @-Nandakishore-wt5is
    @-Nandakishore-wt5is 2 роки тому

    Hi can you make a video for multiple type accounts using mern stack , for example there are two types of users regular users, product manufacturers, from which we will take different information from both of them. But we need to allow them to login from same page. Is it possible ?

  • @bigbeeforever
    @bigbeeforever 4 роки тому +2

    surely on signup you wouldnt have a choice of role, so how would you assign the ADMIN role other than everyone is BASIC. would this be done in the backend?

    • @harshjindal5179
      @harshjindal5179 4 роки тому

      hlo can u tell me how to compile and run this application ?

  • @rafishaaya1658
    @rafishaaya1658 2 роки тому

    great video though, would that be useful for a management systems as well?

  • @sakshamsrivastava6280
    @sakshamsrivastava6280 3 роки тому

    thanks for this man