web-dev-qa-db-ja.com

PHPからカテゴリを作成するときにACLルールを正しく保存して理解する方法

別のCMSからカテゴリを大量にインポートし、以下のコードを使用してカテゴリを作成しています。

$basePath = JPATH_ADMINISTRATOR.'/components/com_categories';
require_once $basePath.'/models/category.php';
$config  = array('table_path' => $basePath.'/tables');
$catmodel = new CategoriesModelCategory($config);
// Populate the params array with values to save, for rules:
$params['rules'] = array(
    'core.edit.state' => array(),
    'core.edit.delete' => array(),
    'core.edit.edit' => array(),
    'core.edit.state' => array(),
    'core.edit.edit.own' => array(1=>true)
);
if(!$catmodel->save($params))
    return false;

これはすべて驚くほどうまくいき、期待どおりの権限でカテゴリを作成します。

ただし、途中で手動で追加された他のカテゴリを調べると、すべて同じparent_idの祖先があるため、#__assetsテーブルにrules列の2つの異なる種類があることがわかります。

#__ assetsルールの例#1上記のコードによって作成され、一部はAdmin Category Managerを使用して、多くのカテゴリで使用されています

{
    "core.create":[],
    "core.delete":[],
    "core.edit":[],
    "core.edit.state":[],
    "core.edit.own":{"1":1}
}

#__ assets rules Example#2Admin Category Managerによって作成され、多くのカテゴリで使用されています

{
    "core.create":{"6":1,"3":1},
    "core.delete":{"6":1},
    "core.edit":{"6":1,"4":1},
    "core.edit.state":{"6":1,"5":1},
    "core.edit.own":{"1":1,"6":1,"3":1}
}

カテゴリーマネージャーでそれらを表示すると、両方のカテゴリーが同じ権限を持っているように見えます-「所有者の編集」が「許可」に設定されている以外のすべてを継承します。したがって、実際の問題は2つあります。

  1. これら2つのルールセットの違いは何ですか
  2. 私たちが使用している方法(例1を示す)はとにかく不完全です
6
GDP

アセットテーブルのルール列は、各アイテムのカスタムルールを個別に定義します。

フィールドのデフォルト値は次のようになります。

{"core.create":[],"core.delete":[],"core.edit":[],"core.edit.state":[],"core.edit.own":[]}

つまり、このアイテムのすべての権限ルールは、各グループに指定されているデフォルトのグローバル構成設定から権限を継承します。

それ以外の場合は、アイテムごとに権限のオーバーライドがあります。

{"core.create":{"6":1,"3":1},"core.delete":{"6":1},"core.edit":{"6":1,"4":1},"core.edit.state":{"6":1,"5":1},"core.edit.own":{"6":1,"3":1}}

core.create":{"6":1,"3":0}の値の意味の説明:

このアイテムのグループID 6には作成権限が "許可"(1)に設定されていますが、グループIDには作成権限が "拒否"(0)に設定されています。 (これらの権限はデフォルトのグローバル権限を上書きし、残りのグループの他のすべての権限は継承されます。)

お役に立てれば...

2
FFrewin