質問: phpを使用して、カスタムユーザーグループのaclルールをコアコンポーネントに追加するにはどうすればよいですか? このコンポーネントには、インストール時にusersmodelgroupで作成されるカスタムユーザーグループがあります。コンポーネントにすでに存在している可能性のある権限に影響を与えることなく、そのユーザーグループのcom_contentに特定の権限を追加する必要があります。私はコンテンツを作成するときに記事またはカテゴリの完全なルールセットを作成することに慣れており、このタスクでは、アセットレコードを読み取り、配列操作を使用してルールを追加できますが、それは少し力ずくのようです。 これを行うより良い方法はありますか?現在のcom_content aclルール:"core.admin":{"7":1}, "core.manage":{"6":1}, "core.create":{"3":1}, "core.delete":[], "core.edit":{"4":1}, "core.edit.state":{"5":1}, "core.edit.own":[] カスタムユーザーグループとして「123」を使用して、次の一連のルールを設定する必要があります。"core.admin":{"7":1}, "core.manage":{"6":1}, "core.create":{"3":1}, "core.delete":["123":0], "core.edit":{"4":1,"123":1}, "core.edit.state":{"5":1}, "core.edit.own":[]
回答: よりエレガントな解決策を待っている、これがうまくいく私のネアンデルタール人のアプローチです:// get the asset record for com_content // i'm not assuming that the row id will be the same in every joomla installation $db = jfactory::getdbo(); $query = $db->getquery(true); $query->select('id, rules')->from($db->quotename('#__assets')) ->where($db->quotename('name') .'='.$db->quote('com_content')); $db->setquery($query); $asset = $db->loadobject(); $rules = new jregistry(); // create a new joomla registry $rules->loadstring($asset->rules); // load the current acl rules into the registry $rule_array = $rules->toarray(); // convert to array for easy manipulation // set the acl rules for custom usergroup 123 $rule_array['core.delete'][123] = 0; // my custom usergroup cannot delete content $rule_array['core.edit'][123] = 1; // my custom usergroup can edit content // re-load the rules registry with the modified rules array for saving $rules->loadarray($rule_array); jtable::addincludepath(jpath_administrator.'/libraries/joomla/table'); $row = jtable::getinstance('asset'); $row->load($asset->id); $row->rules = $rules->__tostring(); // save as string $row->store();