Show
Ignore:
Timestamp:
12/30/2007 03:23:58 PM (12 months ago)
Author:
Shadowhand
Message:

Fine-tuning the permissions on the admin part of the website:

  • Only admins can edit any user, change user roles, or delete a user.
  • Non-admins can edit their own information and manage tutorials.
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • branches/website/application/controllers/admin.php

    r1651 r1652  
    102102                        $this->template->title = 'Manage Users'; 
    103103 
    104                         $users = array(); 
    105                         foreach (ORM::factory('user')->find(ALL) as $user) 
    106                         { 
    107                                 // Create a list of all users 
    108                                 $users[$user->username] = $user->username; 
    109                         } 
    110  
    111104                        $this->template->content = View::factory('admin/edit_list') 
    112                                 ->set('new', 'Add a new user') 
    113                                 ->set('items', $users) 
    114105                                ->set('edit_action', 'admin/manage_users') 
    115                                 ->set('delete_action', 'admin/delete_user'); 
     106                                ->set('delete_action', 'admin/delete_user') 
     107                                ->bind('items', $items); 
     108 
     109                        if ($this->user->has_role('admin')) 
     110                        { 
     111                                $this->template->content->set('new', 'Add a new user'); 
     112 
     113                                foreach (ORM::factory('user')->find(ALL) as $user) 
     114                                { 
     115                                        // Create a list of all users 
     116                                        $items[$user->username] = $user->username; 
     117                                } 
     118                        } 
     119                        else 
     120                        { 
     121                                // Show only this user 
     122                                $items[$this->user->username] = $this->user->username; 
     123                        } 
    116124                } 
    117125                else 
     
    145153                        } 
    146154 
     155                        if ( ! $this->user->has_role('admin')) 
     156                        { 
     157                                // Only admins are allowed to change user roles 
     158                                $form->roles->disabled(TRUE); 
     159                        } 
     160 
    147161                        if ($form->validate() AND $data = $form->as_array()) 
    148162                        { 
     
    165179                                $user->save() and $this->session->set_flash('message', '<p><strong>Success!</strong> User saved successfully.</p>'); 
    166180 
    167                                 foreach (array_diff($user->roles, $set_roles) as $role) 
    168                                 { 
    169                                         // Remove roles that were unchecked 
    170                                         $user->remove_role($role); 
    171                                 } 
    172  
    173                                 foreach (array_diff($set_roles, $user->roles) as $role) 
    174                                 { 
    175                                         // Add new roles 
    176                                         $user->add_role($role); 
     181                                // Only admins are allowed to change user roles 
     182                                if ($this->user->has_role('admin')) 
     183                                { 
     184                                        foreach (array_diff($user->roles, $set_roles) as $role) 
     185                                        { 
     186                                                // Remove roles that were unchecked 
     187                                                $user->remove_role($role); 
     188                                        } 
     189 
     190                                        foreach (array_diff($set_roles, $user->roles) as $role) 
     191                                        { 
     192                                                // Add new roles 
     193                                                $user->add_role($role); 
     194                                        } 
    177195                                } 
    178196 
     
    193211                $user = new User_Model($id); 
    194212 
    195                 if ($confirm === 'no' OR $user->id == 0) 
     213                if (! $this->user->has_role('admin') OR $confirm === 'no' OR $user->id == 0) 
    196214                { 
    197215                        // Go back the to the management page