реализация аутентификации на основе ролей в веб-приложении MERN - PullRequest
1 голос
/ 12 января 2020

Я хочу реализовать аутентификацию на основе ролей в моем приложении React ... я храню admin и роли в mongodb
сейчас 1) как получить роль пользователя при входе в приложение ... я сохраняю логин данные в токенах ... которые хранятся в локальном хранилище в браузере, и срок действия каждого токена истекает. Это mon goose Схема

    email: {
        type: String,
        require: true
    }, 
    password: {
        type: String,
        require: true
    },
    roles: { 
        type: String,
        default: "editor"
    }

Это мое приложение реакции. js file

const App = () => {
  const { token, login, logout, adminId }= useAuth();

  let routes;

 if (token) {
   routes=(

   );
 }else{
   routes=(

   );
 }


 return(
   <AuthContext.Provider 
   value={{
     isLoggedIn: !!token,
     token: token,
    //  editorId: editorId,
     adminId: adminId, 
     login: login, 
     logout: logout
     }}
     >
   <Router>
        <Switch>
         {routes}
        </Switch>
   </Router>
   </AuthContext.Provider>
 );
};

и это файл контекста аутентификации

import {createContext} from 'react';

export const AuthContext = createContext({
    isLoggedIn: false,
    adminId: null,
    token: null,
    login: () =>{},
    logout: () =>{}
});

, и я использую casl .. теперь это безопасно для использования или есть лучший способ реализовать роль пользователя в приложении реагирования 2) Как установить роль зарегистрированного пользователя в файл умений casl

Это способность. js file

//ability.js
import { Ability, AbilityBuilder } from "@casl/ability"
import store from "../store/index"

// Defines how to detect object's type
function subjectName(item) {
  if (!item || typeof item === "string") {
    return item
  }
  return item.__type
}

const ability = new Ability([], { subjectName });



function defineRulesFor(auth) {
    const { can, rules } = AbilityBuilder.extract()
    if (auth.role === "editor") {

      can("view", "Profile")

    }
    if (auth.role === "admin") {

      can("accept", "Application")

    }
    if (auth.role === "viewer") {
      can("review", "Proposal")
    }
    return rules
  }
  export default ability;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...