v2.x Sistema de Roles

Tema en 'Mods' iniciado por prinick, el 30 Sep 2017.

  1. prinick

    prinick Ocrend Developer Miembro del Staff

    Registrado:
    28 Sep 2017
    Mensajes:
    76
    Me Gusta recibidos:
    9
    Puntos de trofeo:
    8
    Género:
    Masculino
    Profesión:
    Engineer
    País:
    venezuela
    Nombre: Sistema de Roles
    Versión: 2.0.x

    Descripción:
    El sistema de roles se ajusta a N roles, es 100% escalable y extensible, lo subí como tutorial a la lista de reproducción de YouTube sobre el Framework.

    Instalación:

    Recursos:
    Todo lo realizado en el vídeo está anclado en un repositorio: https://github.com/prinick96/roles-sys-ocrend-framework
    El repositorio tiene únicamente los archivos tocados del Framework para que la implementación sea exitosa.
     
  2. Leonardo

    Leonardo New Member

    Registrado:
    12 Oct 2017
    Mensajes:
    1
    Me Gusta recibidos:
    0
    Puntos de trofeo:
    0
    Género:
    Masculino
    Estimado Prinik

    Gracias por compartir el sistema de roles (en este momento lo estoy estudiando en el tutorial).
    Una consulta. Con este sistema puedo tambien diferenciar usuarios normales (operadores de un sistema/aplicacion web), administradores y posteriomente clientes en el caso de que agregue una tabla con los datos que los clientes necesitan? Obvio creando las relaciones y agregando los campos necesarios para los cliente, ya que todos son personas; o es necesario hacerlo de otra forma?
    En el caso de agregar un producto o venta en un sistema, me puedo basar en esto modificando o creando nueva interface o es mas complejo?.

    Gracias

    Leonardo.
     
  3. prinick

    prinick Ocrend Developer Miembro del Staff

    Registrado:
    28 Sep 2017
    Mensajes:
    76
    Me Gusta recibidos:
    9
    Puntos de trofeo:
    8
    Género:
    Masculino
    Profesión:
    Engineer
    País:
    venezuela
    Lo que dices del cliente, se aplica perfectamente éste sistema.
    Lo de los productos es a parte.

    Saludos
     
  4. lalo

    lalo New Member

    Registrado:
    30 Sep 2017
    Mensajes:
    16
    Me Gusta recibidos:
    0
    Puntos de trofeo:
    1
    Género:
    Masculino
    Lo que he visto que si agregas otras opciones a los roles, cuando en una aplicación le pones roles de editor si estas como admin que supuestamente es mas que editor no podes entrar, solo ingresan los editores.
    No debería ser que el admin tenga derecho a ingreso a todo y de ahí para abajo con los demás tipos de usuarios?
     
  5. prinick

    prinick Ocrend Developer Miembro del Staff

    Registrado:
    28 Sep 2017
    Mensajes:
    76
    Me Gusta recibidos:
    9
    Puntos de trofeo:
    8
    Género:
    Masculino
    Profesión:
    Engineer
    País:
    venezuela
    En la parte donde implementas los permisos en Controllers.php, añade una condición extra para no validar cuándo sea un administrador y ya está, éste sistema es totalmente extensible y modificable.

    Saludos
     
  6. kriollo

    kriollo New Member

    Registrado:
    30 Sep 2017
    Mensajes:
    29
    Me Gusta recibidos:
    6
    Puntos de trofeo:
    3
    Género:
    Masculino
    Profesión:
    Ingenierio en Redes e Informática
    País:
    Chile
    Página Inicial:
    Yo hice lo siguiente para restringir el acceso a opciones que sólo deben tener acceso como administrador, y sólo a opciones que deben tener acceso por medio del perfil asignado:

    en el archivo Controllers.php ubicada en Ocrend/Kernel/Controllers

    en la funcion:
    private function: setControllerConfig($config) {
    agregué
    PHP:
    $this->controllerConfig['only_admin'] = false;
    $this->controllerConfig['access_menu'] = false;

    # Configura el controlador para solo ser visto por usuario admin
            
    if (array_key_exists('only_admin'$config)) {
              
    $this->controllerConfig['only_admin'] = (bool) $config['only_admin'];
            }
    # Configura el controlador para solo ser visto por usuario con perfil de acceso
            
    if (array_key_exists('access_menu'$config)) {
              
    $this->controllerConfig['access_menu'] = (array) $config['access_menu'];
            }
    en la funcion: private function knowVisitorPermissions() {
    agregué
    PHP:
    if ($this->is_logged){
            
    # acceso a opción sólo admin  
            
    if ($this->controllerConfig['only_admin'] && $this->user['rol'] != ){
              
    $this->functions->redir($config['site']['url'] . '&error=true');
            }
            
    # acceso opcion sólo si usuario tiene permiso en perfil
            
    if ($this->controllerConfig['access_menu']['access']){
              
    $flat false;
              foreach (
    $this->menu_user as $key => $value) {
                if (
    $value['id_menu'] == $this->controllerConfig['access_menu']['id_menu'])
                {
                  
    $flat=true;
                  break;
                }
              }
              if (
    $flat == false){
                
    $this->functions->redir($config['site']['url'] . '&error=true');
              }
            }
          }
    En el controlador si sólo debe tener acceso cuando es admin:
    PHP:
    parent::__construct($router,array(
                
    'users_logged' => true,
                
    'only_admin' => true
            
    ));
    En el controlador si se debe restringir acceso mediante perfil asignado:
    PHP:
    parent::__construct($router,array(
                
    'users_logged' => true,
                
    'access_menu' => ['id_menu' => 2'access' => true]
            ));
    Esto está asociado a funcion que llena un arreglo con el perfil del usuario, si el usuario es admin, tiene acceso a todo, si el usuario es normal, sólo se llenará el arreglo con lo que tiene acceso.


    revisa mi proyecto: https://github.com/kriollo/login
    ahí esta todo el contenido y puedes probarlo, saludos.

    kriollo
     
    Última edición: 26 Nov 2017
    A prinick le gusta esto.
  7. Marco Corona

    Marco Corona New Member

    Registrado:
    29 Sep 2017
    Mensajes:
    26
    Me Gusta recibidos:
    5
    Puntos de trofeo:
    3
    Género:
    Masculino
    Saludos tiempo despues, pero yo he hecho lo siguiente;

    En Functions.php, he agregado una pequeña función utilizando strings en el tipo de acceso del usuario.

    PHP:
    public function access($type) : string {
        global 
    $session;

        
    $level null;

        switch (
    $type) {
          case 
    'admin':
            
    $level 0;
            break;
          case 
    'supervisorg':
            
    $level 2;
            break;
          case 
    'supervisorl':
            
    $level 3;
            break;
          case 
    'cajero':
            
    $level 4;
            break;
          default:
            
    $level 10;
            break;
        }

        switch (
    $session->get('FR3SHSAF17_user_id')) {
          case 
    'admin':
            
    $user 0;
            break;
          case 
    'supervisorg':
            
    $user 2;
            break;
          case 
    'supervisorl':
            
    $user 3;
            break;
          case 
    'cajero':
            
    $user 4;
            break;
          default:
            
    $user 10;
            break;
        }

        if(
    $level <= $user){
          
    $this->redir('');
          return 
    false;
        }

        return 
    true;
       }
    De esta manera, en el controlador establezco el nivel mínimo requerido para acceder por cada metodo que deseo restringir;

    PHP:
    switch ($this->method) {
              case 
    'users':
                
    $this->functions->access('admin');
                echo 
    $this->template->render('error/error');
                
    // echo 'admin';
                
    break;
             
              default:
                
    $this->functions->redir('');
                break;
            }
    Es una forma muy simple que he hecho para controlar el nivel de acceso por método, la lógica es

    Si "nivel_requerido" <= "nivel_usuario" = permite acceso (utilizando la lógica que 0 = admin y ascendente es una disminución de privilegios).
     
    A prinick le gusta esto.

Compartir esta página