Ver Mensaje Individual
  #8 (permalink)  
Antiguo 04/12/2013, 10:40
Avatar de reborn
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...