Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

CakePHP - Permitir acción solo al dueño del post, al admin y al super admin

Estas en el tema de CakePHP - Permitir acción solo al dueño del post, al admin y al super admin en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, sigo practicando con cake el tema del blog y los usuarios. Ahora lo q quiero lograr es q cada post pueda ser editado y/o ...
  #1 (permalink)  
Antiguo 03/12/2013, 06:44
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
CakePHP - Permitir acción solo al dueño del post, al admin y al super admin

Hola,

sigo practicando con cake el tema del blog y los usuarios.

Ahora lo q quiero lograr es q cada post pueda ser editado y/o eliminado por, obviamente, el dueño del post, el admin y el super admin.

Agregue el campo "rango" con tipo numerico. 1=super admin, 2=admin, 3=usuario comun

En el PostController tengo lo siguiente:

Código PHP:
<?php

    
public function isAuthorized($user) {        
        
        
//Cualquier usuario agrega posts
        
if($this->action === 'add'){
            return 
true;
        }
        
 
//ACA ES DONDE QUIERO AGREGAR PARA EL ADMIN Y EL SUPER ADMIN TAMBIEN PUEDAN EDITAR Y ELIMINAR POSTS


        //Solo el dueño del post puede editar y eliminar su post
        
if (in_array($this->action, array('edit''delete'))) {
                
$postId $this->request->params['pass'][0];
            if (
$this->Post->isOwnedBy($postId$user['id'])) {
                return 
true;
            }
        }
        
//*******************************************************


        
parent::isAuthorized($user);
    }
Y en el modelo Post tengo lo siguiente:
Código PHP:

    
public function isOwnedBy($post$user) {
        return 
$this->field('id', array('id' => $post'user_id' => $user)) === $post;
    } 
Esta linea trae el id del post?

Código PHP:
$postId $this->request->params['pass'][0


Gracias

Última edición por reborn; 03/12/2013 a las 07:00
  #2 (permalink)  
Antiguo 03/12/2013, 07:07
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

Lo hice de esta forma pero me encuentro con otro inconveniente, el q esta resaltado en negrita:

-El dueño del post puede editar o eliminar su propio post
-SuperAdmin puede editar o eliminar cualquier post de cualquier usuario
-Admin puede editar o eliminar cualquier post de cualquier usuario MENOS de Super Admin


Código PHP:
Ver original
  1. public function isAuthorized($user) {        
  2.        
  3.         //Autorizar a cualquier tipo de usuario a agregar posts
  4.         if($this->action === 'add'){
  5.             return true;
  6.         }
  7.        
  8.         //Solo el dueño del post puede editar y eliminar su post
  9.         if (in_array($this->action, array('edit', 'delete'))) {
  10.            
  11.                 $postId = $this->request->params['pass'][0];
  12.                
  13.             if ($this->Post->isOwnedBy($postId, $user['id'])) {
  14.  
  15.                 return true;
  16.  
  17.             }elseif($user['role'] == 1 || $user['role'] == 2){
  18.                 //Si el rango es 1 o 2, tambien puede editar o eliminar el post
  19.                 return true;
  20.  
  21.             }
  22.         }
  23.        
  24.         parent::isAuthorized($user);
  25.     }

Última edición por reborn; 03/12/2013 a las 07:25
  #3 (permalink)  
Antiguo 03/12/2013, 11:03
 
Fecha de Ingreso: abril-2013
Mensajes: 61
Antigüedad: 11 años
Puntos: 4
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

Pues te tendrias que hacer con el user_id del dueño del Posts.

Luego con ese ID, buscas en la tabla de USERS el usuario en cuestion y averiguas su rol.

Código PHP:
Ver original
  1. ....
  2.  
  3.  }elseif($user['role'] == 2 &&  $RoldelPost != 1){
  4.  
  5. return true;
  6.  }elseif($user['role'] == 1){
  7. return true;
  8. }
  #4 (permalink)  
Antiguo 03/12/2013, 11:50
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

Cita:
Iniciado por nanotk58 Ver Mensaje
Pues te tendrias que hacer con el user_id del dueño del Posts.

Luego con ese ID, buscas en la tabla de USERS el usuario en cuestion y averiguas su rol.

Código PHP:
Ver original
  1. ....
  2.  
  3.  }elseif($user['role'] == 2 &&  $RoldelPost != 1){
  4.  
  5. return true;
  6.  }elseif($user['role'] == 1){
  7. return true;
  8. }

Claro, eso es lo q estoy intentando hacer.

Quiero crear una funcion en el modelo User similar a la de isOwnedBy q hay en el modelo Post, en donde busque al usuario por el user_id del post y de ahi sacar el rol y llevarlo al PostsController y realizar la verificacion, pero justamente es lo q no me sale.

Lo q pasa q me pierdo al querer realizar la consulta.

Yo tengo la funcion getRole() en el modelo User y la quiero utilizar en el PostsController, pero no se de q forma:

User.php
Código PHP:

public function role($idUser){

        
$users $this->User->find('all', array(
                
'conditions' => array('User.id' => $idUser)));
        
        
$this->set('users'$users); 
        
    } 
...con eso busco el usuario, pero como "extraigo" solamente el Role y de ahi "exportarlo" al PostsController?, eso es lo q no me sale
  #5 (permalink)  
Antiguo 03/12/2013, 13:08
 
Fecha de Ingreso: abril-2013
Mensajes: 61
Antigüedad: 11 años
Puntos: 4
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

Si los controladores estan relacionados

Los usuarios desde POSTS los obtienes asi:
Código PHP:
Ver original
  1. $users = $this->Post -> User->find('all');

Si lo que buscas es un solo usuario

Código PHP:
Ver original
  1. $users = $this->Post -> User->find('first',array( 'conditions' => array('User.id' => $idUser)));


Existe esto, que es muy util para ver que tienes.

Código PHP:
Ver original
  1. debug($users);
  #6 (permalink)  
Antiguo 04/12/2013, 04:31
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

Ok, voy a probar a ver q sale.
Tengo q llamar al modelo User para poder usarlo en el PostsController?, algo como esto...

Código PHP:
Controller::loadModel('User'); 
  #7 (permalink)  
Antiguo 04/12/2013, 07:14
 
Fecha de Ingreso: abril-2013
Mensajes: 61
Antigüedad: 11 años
Puntos: 4
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

No, con esto, $this->Post -> User->
el cake, ya lo deberia encontrar.
  #8 (permalink)  
Antiguo 04/12/2013, 10:40
Avatar de reborn  
Fecha de Ingreso: febrero-2010
Mensajes: 440
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: CakePHP - Permitir acción solo al dueño del post, al admin y al super admi

Volviendo al tema principal, todavia no pude resolverlo, no se como plantearlo:

Yo tengo la funcion isAuthorized (la del book de cake) q es sencilla y a su vez una funcion isOwnedBy() en el modelo Post q se encarga de verificar si el post pertece al usuario q esta logueado y le permite editar/eliminar:

Código PHP:

public function isAuthorized($user) {
    
// All registered users can add posts
    
if ($this->action === 'add') {
        return 
true;
    }

    
// The owner of a post can edit and delete it
    
if (in_array($this->action, array('edit''delete'))) {
        
$postId $this->request->params['pass'][0];
        if (
$this->Post->isOwnedBy($postId$user['id'])) {
            return 
true;
        }
    }

    return 
parent::isAuthorized($user);

...esa es la del book de cake, funciona todo bien.

Lo q yo quiero hacer es extender esa funcion isAuthorized() y hacer lo q dije al principio, el super admin hace todo, el admin hace todo pero no toca al super admin y el user comun solo edita/elimina su post...


Empece haciendo esto pero me trabo en la parte del Admin, lo demas anda bien, no se como hacer para q admin edite/elimine posts excepto los de super admin:

Código PHP:

    
public function isAuthorized($user) {        
        
Controller::loadModel('User');
        
//Autorizar a cualquier tipo de usuario a agregar posts
        
if($this->action === 'add'){
            return 
true;
        }          
        
        
//Solo el dueño del post puede editar y eliminar su post
        //Tambien tienen permisos el super admin y el admin
        
if (in_array($this->action, array('edit''delete'))) { 
        

                
//si rango es 1 (super admin) edita y/o elimina cualquier post de cualquier usuario
            
if ($userRolePost == 1) {
                return 
true;
                
                
//si el rango es 2 (admin) edita y/o elimina cualquier post EXCEPTO los de Super Admin
            
}elseif($ACA ME TRABO!!!!){

                    return 
true;
                
                
//Usuario comun solo edita y/o elimina su propio post
            
}elseif($this->Post->isOwnedBy($postId$user['id'])){
                
                return 
true;
                
            }else{
                return 
false;
            }
        }
        
        
parent::isAuthorized($user);
    } 
...ya se como obtener los datos del post, el id del user y todo eso (donde me habia trabado tambien) pero no se como seguir.
No se si hacer una funcion en el modelo User q compare el id del user q creo el post con el id del user que se se logueo, y despues comparar los roles...

Se me hizo una ensalada...

Etiquetas: admin, cakephp, permitir, php, post, super
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:43.