0

権限の問題に直面して、activecollab カスタム モジュールに取り組んでいます。「on_system_permissions.php」ハンドラを使用して権限を追加しました。しかし、問題は、ログインしたユーザーが特定のアクションの許可を持っているかどうかをコードで確認する方法です..

私はactivecollabの他のモジュールから以下のコードを取得しました:

class Role extends FwRole implements IHomescreen {

..
..

    function isPeopleManager(){

       $this->getPermissionValue('can_manage_people');

    }
...
...

}

それは、アクションの許可を確認することですか?それとも、そのアクションの値を返すだけですか?

上記のクラスでは、$this->を使用し、 FwRoleによってクラスを拡張しています。リターンを取得するために使用FwRole::getPermissionValue('can_manage_people');すると、$this とオブジェクトのエラーが発生します。

だから私の質問は、コード内の特定のアクションの許可を確認する方法と、getPermissionValue() 関数を使用して許可を取得する方法です。

4

2 に答える 2

1

ユーザー インスタンスがある場合、getSystemPermissionメソッドを実行することにより、そのユーザーが特定のアクセス許可を [はい] に設定しているかどうかを確認できます。

$user = Users::findById(12);

if($user instanceof User) {
  if($user->getSystemPermission('my_permission')) {
    print 'My permission set to Yes';
  } else {
    print 'My permission set to No';
  } // if
} // if

activeCollab パーミッションはカスケードされることに注意してください (相互に依存する可能性があります)。依存するアクセス許可がある場合、システムは、それだけでなく、親のアクセス許可が [はい] に設定されているかどうかも確認します (たとえば、manage_projectsアクセス許可がない場合、システムはsystem_accessアクセス許可に依存しているため、アクセス許可に対して false を返します)。

アップデート

パーミッションのカスケードは、activeCollab 3 で導入されました!

于 2012-05-22T17:04:18.750 に答える
1

エラーは、あなたが $this を呼び出しているが、オブジェクト コンテキストにいないことを示しています。これgetPermissionValueは、静的コンテキストでメソッドを呼び出しているためです...

あなたが呼び出すあなたのコードでFwRole::getPermissionValue('can_manage_people');は、これを行う必要があります:

$role = new FwRole; // if it needs a parameter in constructor, call it like new FwRole($param);
$permission_value = $role->getPermissionValue('permission');

クラスFwRoleのインスタンスを作成することにより、FwRoleオブジェクトを作成するため、オブジェクトコンテキストになり、エラー(提供した)はなくなります。

于 2012-05-22T12:57:47.600 に答える