1

Joomla 2.5.14 には、次のような現在のユーザー グループ ID を取得するスクリプトがあります。

$groups = $user->get('groups');
foreach($groups as $group) {
    echo "<p>Your group ID is:" . $group . "</p>";
};

ここで、アクセス レベルを考慮して、このユーザーが読むことができる記事の数を数える必要があります。

そのためには、viewlevels テーブルから次のようなアクセス レベルを選択する必要があります。

id     title            rules JSON encoded access control.
1   Public      [1]
2   AccessA     [13,8,16,17]
3   AccesssF    [8]
4   AccessD     [14,8]
6   AccessB     [8,16,17]
7       AccessC     [8,17]

したがって、たとえば、グループ 17 は AccessA、AccessB、および Access C の記事を読むことができます。

次のクエリを試しましたが、行が選択されていません。

$query="SELECT * FROM xmb9d_viewlevels WHERE rules LIKE '%.$group.%'";

現在のユーザー グループのすべてのアクセス レベルを選択し、そのユーザーが読むことができる記事の数をカウントするにはどうすればよいですか?

助けてくれてありがとう!

4

2 に答える 2

4

まずは https://github.com/joomla/joomla-cms/blob/master/libraries/joomla/access/access.php#L285

JAccess::getGroupsByUser($userId, $recursive = true)

継承を介してユーザーが一致するグループを取得します ($recursive を false にしない限り)

https://github.com/joomla/joomla-cms/blob/master/libraries/joomla/access/access.php#L402

JAccess::getAuthorisedViewLevels($userId)ユーザーが配列として表示できるすべてのビューレベルを提供します。

もしあなたがそうするなら

$allowedViewLevels = JAccess::getAuthorisedViewLevels($userId);

他に何もできなければ

$implodedViewLevels = implode(',', $allowedViewLevels);

....

$query->select($db->quoteName('id'))
->from('#__content')
->where($db->quoteName('access') . 'IN (' . $implodedViewLevels . ')';
 ....

(テストされていませんが、一般的なアイデアは得られます)。joomla では、API と戦うのではなく、常に API に作業を任せるようにしてください。

于 2013-08-24T02:58:18.423 に答える