0

これは簡単に違いないと思っていましたが、理解するのに本当に苦労しました。オブジェクトに対するロールの取得済みのアクセス許可を確認したいのです。

実際のユーザーの役割や権限を確認したくありません。つまり、匿名のオブジェクトに「コンテンツ情報へのアクセス」権限があるかどうかを確認したいだけです。問題のオブジェクトにアクセス許可が設定されている場合、これは簡単ですが、アクセス許可が取得されると、より困難になります。

私はこれを試しました:

siteRoles = ('Anonymous', 'myRole1', 'myRole2', 'Manager')
permission = 'Access contents information'

rolesDictList = self.rolesOfPermission( permission )

roles = [roleDict['name'] for roleDict in rolesDictList if roleDict['selected']]

for i, role in enumerate(siteRoles):
    if role in roles:
        roleMin = i
        break

return roleMin

取得した権限が付与されないため、これは機能しません。

私の次のアイデアは、取得されていないアクセス許可が見つかるまで、親を上に見ていくことでした。しかし、これは問題を実際に解決するものではありません。階層の上位に設定されているアクセス許可を無視するからです (わかりました。取得したものを確認して、上位に進むことができます)。また、奇妙な点もあります。「Manager」は常に rolesOfPermission で選択されます。これはなぜですか?

とにかく、これを行うためのより簡単な方法があるに違いないと思いますか?

4

1 に答える 1

3

rolesForPermissionOn()次の関数を使用するだけです。

from AccessControl.PermissionRole import rolesForPermissionOn

roles = rolesForPermissionOn(permission, context)

これは、特定のコンテキストに対する特定の権限を持つロールのリストを返します。必要に応じて取得チェーンをたどります。

于 2012-11-17T12:12:17.557 に答える