Joomla.it Forum

Joomla! 1.5.x (versione con supporto terminato) => Joomla! 1.5 => : The-BiT 22 Feb 2009, 21:01:03

: Modificare permessi utenti backend in authoritazion.php: come?
: The-BiT 22 Feb 2009, 21:01:03
Buona sera,
giorni fa ho aperto un topic per cercare di capire come estendere e/o modificare i permessi backend di utenti come "manager" e "administrator".
Rispetto alla versione 1.0.x di joomla, in cui tali permessi erano presenti in /includes/gacl.class.php, in joomla 1.5.x sembra che tali permessi siano gestibili dalla pagina "libraries/joomla/user/authoritazion.php".
Posto qui queste linee codice per cercare, insieme ad altri, di riuscire a capire come aumentare/modificare i permessi in joomla 1.5.
Ho pensato, così, di riportare qui alcuni pezzi importanti del file per riuscire, insieme a voi, a capire come agire.
Sarebbe bello pubblicare una guida su come gestire (in attesa della versione 1.6) i permessi backend sotto joomla 1.5.

Il file, tra le varie istruzioni, si compone di queste (che sono quelle che interessano a noi):
function JAuthorization($options = NULL)
   {
      parent::gacl( $options );

      // ARO value is currently the user type,
      // this changes to user id in proper implementation
      // No hierarchial inheritance so have to do that the long way
      $this->acl = array();

      // special ACl with return value to edit user
      $this->addACL( 'com_user', 'edit', 'users', 'super administrator', null, null, '' );
      $this->addACL( 'com_user', 'edit', 'users', 'administrator', null, null, '' );
      $this->addACL( 'com_user', 'edit', 'users', 'manager', null, null, '' );
      // return value defines xml setup file variant
      $this->addACL( 'com_user', 'edit', 'users', 'author', null, null, 'author' );
      $this->addACL( 'com_user', 'edit', 'users', 'editor', null, null, 'author' );
      $this->addACL( 'com_user', 'edit', 'users', 'publisher', null, null, 'author' );
      $this->addACL( 'com_user', 'edit', 'users', 'registered', null, null, 'registered' );

      // backend login
      $this->addACL( 'login', 'administrator', 'users', 'administrator' );
      $this->addACL( 'login', 'administrator', 'users', 'super administrator' );
      $this->addACL( 'login', 'administrator', 'users', 'manager' );

      $this->addACL( 'login', 'site', 'users', 'administrator' );
      $this->addACL( 'login', 'site', 'users', 'super administrator' );
      $this->addACL( 'login', 'site', 'users', 'manager' );

      $this->addACL( 'login', 'site', 'users', 'registered' );
      $this->addACL( 'login', 'site', 'users', 'author' );
      $this->addACL( 'login', 'site', 'users', 'editor' );
      $this->addACL( 'login', 'site', 'users', 'publisher' );
      // backend menus

      $this->addACL( 'com_banners', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_banners', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_banners', 'manage', 'users', 'manager' );

      $this->addACL( 'com_checkin', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_checkin', 'manage', 'users', 'administrator' );

      $this->addACL( 'com_cache', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_cache', 'manage', 'users', 'administrator' );

      $this->addACL( 'com_config', 'manage', 'users', 'super administrator' );
      //$this->addACL( 'com_config', 'manage', 'users', 'administrator' );

      $this->addACL( 'com_contact', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_contact', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_contact', 'manage', 'users', 'manager' );

      $this->addACL( 'com_components', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_components', 'manage', 'users', 'administrator' );

      $this->addACL( 'com_frontpage', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_frontpage', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_frontpage', 'manage', 'users', 'manager' );
      $this->addACL( 'com_frontpage', 'edit', 'users', 'manager' );

      // access to installers and base installer
      $this->addACL( 'com_installer', 'installer', 'users', 'administrator' );
      $this->addACL( 'com_installer', 'installer', 'users', 'super administrator' );

      $this->addACL( 'com_installer', 'component', 'users', 'administrator' );
      $this->addACL( 'com_installer', 'component', 'users', 'super administrator' );

      $this->addACL( 'com_installer', 'language', 'users', 'super administrator' );
      $this->addACL( 'com_installer', 'language', 'users', 'administrator' );

      $this->addACL( 'com_installer', 'module', 'users', 'administrator' );
      $this->addACL( 'com_installer', 'module', 'users', 'super administrator' );

      $this->addACL( 'com_installer', 'plugin', 'users', 'administrator' );
      $this->addACL( 'com_installer', 'plugin', 'users', 'super administrator' );

      $this->addACL( 'com_installer', 'template', 'users', 'super administrator' );
      $this->addACL( 'com_installer', 'template', 'users', 'administrator' );

      $this->addACL( 'com_languages', 'manage', 'users', 'super administrator' );

      $this->addACL( 'com_plugins', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_plugins', 'manage', 'users', 'administrator' );
      // uncomment following to allow managers to edit modules
      //array( 'administration', 'edit', 'users', 'manager', 'modules', 'all' );

      $this->addACL( 'com_massmail', 'manage', 'users', 'super administrator' );

      $this->addACL( 'com_media', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_media', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_media', 'manage', 'users', 'manager' );
      $this->addACL( 'com_media', 'popup', 'users', 'super administrator' );
      $this->addACL( 'com_media', 'popup', 'users', 'administrator' );
      $this->addACL( 'com_media', 'popup', 'users', 'manager' );
      $this->addACL( 'com_media', 'popup', 'users', 'registered' );
      $this->addACL( 'com_media', 'popup', 'users', 'author' );
      $this->addACL( 'com_media', 'popup', 'users', 'editor' );
      $this->addACL( 'com_media', 'popup', 'users', 'publisher' );

      $this->addACL( 'com_menus', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_menus', 'manage', 'users', 'super administrator' );

      $this->addACL( 'com_modules', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_modules', 'manage', 'users', 'administrator' );

      $this->addACL( 'com_newsfeeds', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_newsfeeds', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_newsfeeds', 'manage', 'users', 'manager' );
      
      $this->addACL( 'com_banners', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_banners', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_banners', 'manage', 'users', 'manager' );

      $this->addACL( 'com_poll', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_poll', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_poll', 'manage', 'users', 'manager' );

      $this->addACL( 'com_templates', 'manage', 'users', 'super administrator' );
      //$this->addACL( 'com_templates', 'manage', 'user', 'administrator' )

      $this->addACL( 'com_trash', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_trash', 'manage', 'users', 'super administrator' );

      // email block users property
      $this->addACL( 'com_users', 'block user', 'users', 'administrator' );
      $this->addACL( 'com_users', 'block user', 'users', 'super administrator' );

      $this->addACL( 'com_users', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_users', 'manage', 'users', 'super administrator' );

      $this->addACL( 'com_weblinks', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_weblinks', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_weblinks', 'manage', 'users', 'manager' );

      // email system events
      $this->addACL( 'com_users', 'email_events', 'users', 'administrator' );
      $this->addACL( 'com_users', 'email_events', 'users', 'super administrator' );
      $this->addACL( 'workflow', 'email_events', 'users', 'administrator', null, null );
      $this->addACL( 'workflow', 'email_events', 'users', 'super administrator', null, null );

      // actions
      $this->addACL( 'com_content', 'add', 'users', 'author', 'content', 'all' );
      $this->addACL( 'com_content', 'add', 'users', 'editor', 'content', 'all' );
      $this->addACL( 'com_content', 'add', 'users', 'publisher', 'content', 'all' );
      $this->addACL( 'com_content', 'edit', 'users', 'author', 'content', 'own' );
      $this->addACL( 'com_content', 'edit', 'users', 'editor', 'content', 'all' );
      $this->addACL( 'com_content', 'edit', 'users', 'publisher', 'content', 'all' );
      $this->addACL( 'com_content', 'publish', 'users', 'publisher', 'content', 'all' );

      $this->addACL( 'com_content', 'add', 'users', 'manager', 'content', 'all' );
      $this->addACL( 'com_content', 'edit', 'users', 'manager', 'content', 'all' );
      $this->addACL( 'com_content', 'publish', 'users', 'manager', 'content', 'all' );

      $this->addACL( 'com_content', 'add', 'users', 'administrator', 'content', 'all' );
      $this->addACL( 'com_content', 'edit', 'users', 'administrator', 'content', 'all' );
      $this->addACL( 'com_content', 'publish', 'users', 'administrator', 'content', 'all' );

      $this->addACL( 'com_content', 'add', 'users', 'super administrator', 'content', 'all' );
      $this->addACL( 'com_content', 'edit', 'users', 'super administrator', 'content', 'all' );
      $this->addACL( 'com_content', 'publish', 'users', 'super administrator', 'content', 'all' );
   }

Ora, la questione è che se, ad esempio, un utente "manager" accede in area backend ha accesso completo a tutti i componenti.
Così ho pensato di aggiungere le stringhe
$this->addACL( 'com_banners', 'manage', 'users', 'super administrator' );
      $this->addACL( 'com_banners', 'manage', 'users', 'administrator' );
      $this->addACL( 'com_banners', 'manage', 'users', 'manager' );
per permettere all'utente manager di vedere solo il componente, ma invece, mettendo questa stringa, non appaiono proprio nessun componente all'utente manager.
Così ho pensato di postare qui quello che ero riuscito a capire finora nella speranza che, insieme, potessimo venirne a capo e, perchè no, recensire un piccolo "how-to".

Chi di voi saprebbe come agire?
: Re: Modificare permessi utenti backend in authoritazion.php: come?
: The-BiT 24 Feb 2009, 12:36:53
Eppure mi sembrava una problematica comune, e di comune interesse.
Peccato non trovare nessuno disposto a collaborare.
: Re: Modificare permessi utenti backend in authoritazion.php: come?
: aomegax 11 Apr 2009, 12:42:30
ci sono  ;D anche se un pò in ritardo

sei per caso riuscito ad aggiungere i ruoli?
io necessito di avere 2 ruoli, uno per l'addetto stampa e l'altro per l'adv. L'addetto stampa deve soltanto visualizzare/aggiungere/modificare gli articoli, mentre l'adv deve utilizzare solo il componente com_banner.

tu in che direzione ti stai muovendo?
: Re:Modificare permessi utenti backend in authoritazion.php: come?
: mega.byte.boss 07 Jun 2009, 17:39:37
Salve, ho esattamente le stesse necessità.
Vorrei aggiungere una voce all'administrator.
Non ho trovato componenti o moduli che lo fanno.

Modificare il codice non mi sembra una buona idea, ogni volta che esce una patch si richia di perdere la modifica.
: Re:Modificare permessi utenti backend in authoritazion.php: come?
: matrix845 01 Aug 2010, 18:41:44
ciaoa  tutti,

mi ricordo di aver gia fatto quest amodfiica su un sito joomla 1.0, ed adesso mi ritrovo a dover fare su una installazione joomla 1.5.20.

Dovrei permettere agli utenti registrati di aggiungere (non pubblicare) contenuti nel sito.

Cosi mi sono aperto il file authorization.php ed ho aggiunto le mie belle righette di codice

      $this->addACL( 'com_content', 'add', 'users', 'registered', 'content', 'all' );
      $this->addACL( 'com_content', 'edit', 'users', 'registered', 'content', 'own' );
      $this->addACL( 'com_content', 'publish', 'users', 'registered', 'content', 'own' );   


so che cosi gli starei dando anche i permessi di pubblicazione, ma è solo per essere (momentaneamente )più larghi .

Nonostante queste direttive ( ho provato anche tutte le combinazioni) , se da frontend tento di accedere alla schermata "submit - content" di joomla mi dice che non ho i permessi per farlo...


voi siete mai riusciti ad abilitare l'invio di articoli per gli utenti registrati da frontend?

Grazie
: Re:Modificare permessi utenti backend in authoritazion.php: come?
: luigifrance 06 Nov 2010, 11:00:59
Se può interessare a qualcuno ho eseguito una modifica nel file in oggetto.
Premetto che avevo bisogno che la cliente potesse mandare newsletter da backend senza poter modificare altro.
Ho fatto varie ricerche ma non trovavo niente del genere. Mi sono imbattuto in questo topic e ho provveduto nelle modifiche.

Ho inserito la cliente nel gruppo "editor" (sappiamo bene che da questo gruppo si ha accesso ovunque per inserire da backend).

Dopodiché ho aperto il file in questione con dreamweaver e mi sono portato nel rigo 196

(http://img836.imageshack.us/img836/1581/autorizathion.jpg) (http://img836.imageshack.us/i/autorizathion.jpg/)

eseguendo la modifica come da immagine

(http://img253.imageshack.us/img253/6897/autorizathionmodificato.jpg) (http://img253.imageshack.us/i/autorizathionmodificato.jpg/)

risultato?
Manda soltanto newsletter da backend.  ;)

N.B. Dimenticavo, usato joomla 1.5 e Communicator (per le newsletter).

Spero d'essere stato utile e non abbia fatto cavolate. Una cosa è certa, a me funziona.  ::)
: Re:Modificare permessi utenti backend in authoritazion.php: come?
: rossiga 12 Dec 2010, 18:08:19
Buona sera,

Ho la necessità di far visualizzare le voci di menu "special" ad alcuni utenti senza attribuirgli particolari permessi.
E' possibile modificare l'utente manager in modo tale che possano solo visualizzare i contenuti "special" eliminando gli altri permessi attribuiti di default?

Grazie.