別の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#2(Admin 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つあります。
アセットテーブルのルール列は、各アイテムのカスタムルールを個別に定義します。
フィールドのデフォルト値は次のようになります。
{"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)に設定されています。 (これらの権限はデフォルトのグローバル権限を上書きし、残りのグループの他のすべての権限は継承されます。)
お役に立てれば...