PermissionModel::permissionColumns PHP Méthode

permissionColumns() public méthode

Get all of the permission columns in the system.
public permissionColumns ( boolean $JunctionTable = false, boolean $JunctionColumn = false ) : mixed
$JunctionTable boolean
$JunctionColumn boolean
Résultat mixed
    public function permissionColumns($JunctionTable = false, $JunctionColumn = false)
    {
        $Key = "{$JunctionTable}__{$JunctionColumn}";
        if (!isset($this->_PermissionColumns[$Key])) {
            $SQL = clone $this->SQL;
            $SQL->reset();
            $SQL->select('*')->from('Permission')->limit(1);
            if ($JunctionTable !== false && $JunctionColumn !== false) {
                $SQL->where('JunctionTable', $JunctionTable)->where('JunctionColumn', $JunctionColumn)->where('RoleID', 0);
            }
            $Cols = $SQL->get()->firstRow(DATASET_TYPE_ARRAY);
            unset($Cols['RoleID'], $Cols['JunctionTable'], $Cols['JunctionColumn'], $Cols['JunctionID']);
            $this->_PermissionColumns[$Key] = $Cols;
        }
        return $this->_PermissionColumns[$Key];
    }

Usage Example

 /**
  *
  *
  * @return bool
  */
 public function insertPermissionTable()
 {
     //      $this->LoadState();
     // Clear the permission table in case the step was only half done before.
     $this->SQL->delete('Permission', array('RoleID <>' => 0));
     // Grab all of the permission columns.
     $PM = new PermissionModel();
     $GlobalColumns = array_filter($PM->permissionColumns());
     unset($GlobalColumns['PermissionID']);
     $JunctionColumns = array_filter($PM->permissionColumns('Category', 'PermissionCategoryID'));
     unset($JunctionColumns['PermissionID']);
     $JunctionColumns = array_merge(array('JunctionTable' => 'Category', 'JunctionColumn' => 'PermissionCategoryID', 'JunctionID' => -1), $JunctionColumns);
     if ($this->importExists('Permission', 'JunctionTable')) {
         $ColumnSets = array(array_merge($GlobalColumns, $JunctionColumns));
         $ColumnSets[0]['JunctionTable'] = null;
         $ColumnSets[0]['JunctionColumn'] = null;
         $ColumnSets[0]['JunctionID'] = null;
     } else {
         $ColumnSets = array($GlobalColumns, $JunctionColumns);
     }
     $Data = $this->SQL->get('zPermission')->resultArray();
     foreach ($Data as $Row) {
         $Presets = array_map('trim', explode(',', val('_Permissions', $Row)));
         foreach ($ColumnSets as $ColumnSet) {
             $Set = array();
             $Set['RoleID'] = $Row['RoleID'];
             foreach ($Presets as $Preset) {
                 if (strpos($Preset, '.') !== false) {
                     // This preset is a specific permission.
                     if (array_key_exists($Preset, $ColumnSet)) {
                         $Set["`{$Preset}`"] = 1;
                     }
                     continue;
                 }
                 $Preset = strtolower($Preset);
                 foreach ($ColumnSet as $ColumnName => $Default) {
                     if (isset($Row[$ColumnName])) {
                         $Value = $Row[$ColumnName];
                     } elseif (strpos($ColumnName, '.') === false) {
                         $Value = $Default;
                     } elseif ($Preset == 'all') {
                         $Value = 1;
                     } elseif ($Preset == 'view') {
                         $Value = StringEndsWith($ColumnName, 'View', true) && !in_array($ColumnName, array('Garden.Settings.View'));
                     } elseif ($Preset == $ColumnName) {
                         $Value = 1;
                     } else {
                         $Value = $Default & 1;
                     }
                     $Set["`{$ColumnName}`"] = $Value;
                 }
             }
             $this->SQL->insert('Permission', $Set);
             unset($Set);
         }
     }
     return true;
 }