Changeset 1652

Show
Ignore:
Timestamp:
12/30/07 15:23:58 (8 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.
Location:
branches/website/application
Files:
2 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 
  • branches/website/application/views/admin/edit_list.php

    r1651 r1652  
    1818 
    1919<ul class="edit_list"> 
     20<?php if ($new != ''): ?> 
    2021<li class="new"><?php echo html::anchor($edit_action.'new', $new) ?></li> 
     22<?php endif ?> 
    2123<?php foreach ($items as $id => $name): ?> 
    2224<li><?php echo html::anchor($edit_action.$id, $name) ?> <span>[<?php echo html::anchor($delete_action.$id, 'Delete') ?>]</span></li>