--- /Users/stephan/Desktop/downloads/panels/panels.module	2006-11-01 00:49:58.000000000 +0100
+++ panels.module	2007-03-01 15:08:03.000000000 +0100
@@ -89,7 +89,7 @@ function panels_menu($may_cache) {
       $items[] = array(
         'path' => $panels->path,
         'title' => $panels->title,
-        'access' => panels_access(unserialize($panels->access)),
+        'access' => panels_access( $panels->access ? explode(', ', $panels->access) : array() ),
         'callback' => 'panels_panels_page',
         'callback arguments' => array($panels->did),
         'type' => MENU_CALLBACK
@@ -104,8 +104,13 @@ function panels_menu($may_cache) {
  * panels.
  */
 function panels_access($access) {
-  // for now
-  return TRUE;
+  static $roles = NULL;
+  if ($roles == NULL) {
+    global $user;
+    $roles = array_keys($user->roles);
+  }
+
+  return !$access || array_intersect($access, $roles);
 }
 
 /**
@@ -270,6 +275,16 @@ function panels_form_builder(&$form, $fo
   $form = form_builder($form_id, $form);
 }
 
+function panels_handler_filter_role() {
+  $rids = array();
+  $result = db_query("SELECT r.rid, r.name FROM {role} r ORDER BY r.name");
+  while ($obj = db_fetch_object($result)) {
+    $rids[$obj->rid] = $obj->name;
+  }
+  return $rids;
+}
+
+
 /**
  * Edit an already loaded panels.
  */
@@ -368,6 +383,14 @@ function panels_edit_form($panels) {
     '#required' => TRUE,
   );
 
+  $form['info']['access'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Access'),
+    '#default_value' => $panels->access,
+    '#options' => panels_handler_filter_role(),
+    '#description' => t('Only the checked roles will be able to see this panel in any form; if no roles are checked, access will not be restricted.'),
+  );
+
   $form['content'] = array(
     '#tree' => true,
   );
@@ -384,9 +407,9 @@ function panels_edit_form($panels) {
     // different due to past submits.
     $order = array();
     if (is_array($panels->content[$area])) {
-	    $order = array_keys($panels->content[$area]);
+      $order = array_keys($panels->content[$area]);
     }
-  	$form['content'][$area]['order'] = array(
+    $form['content'][$area]['order'] = array(
       '#type' => 'hidden',
       '#default_value' => serialize($order),
       '#parents' => array('content', $area, 'order'),
@@ -641,16 +664,21 @@ function panels_load_panels($did) {
   if (!$panels) {
     return NULL;
   }
+  
+  $panels->access = $panels->access ? explode(', ', $panels->access) : array();
+  
   $result = db_query("SELECT * FROM {panels_area} WHERE did = %d ORDER BY area, position", $did);
   while ($area = db_fetch_object($result)) {
     $area->configuration = unserialize($area->configuration);
     $panels->content[$area->area][] = $area;
   }
+  
   return $panels;
 }
 
 function panels_save_panels($panels) {
   if ($panels->did) {
+    $panels->access = implode(', ', $panels->access);
     db_query("UPDATE {panels_info} SET title = '%s', access = '%s', path = '%s', css_id = '%s', layout = '%s' WHERE did = %d", $panels->title, $panels->access, $panels->path, $panels->css_id, $panels->layout, $panels->did);
     db_query("DELETE FROM {panels_area} WHERE did = %d", $panels->did);
   }
