言語の継承を破ったことがありますか?デフォルトでは、everyoneグループは言語への読み取りアクセス権を持っているため、たとえば英語(カナダ)の役割を選択する場合は、他のすべての言語の継承を明確に解除する必要があります。

これを試したところ、特定の役割で言語読み取りを削除すると、公開言語リストからその言語が削除されます。アクセスビューア(>セキュリティツール)を使用して、言語読み取りが別の役割から継承されていないことを確認します。
dotPeekで公開ダイアログを作成するメソッドを見てください。これはsitecore/shell / Applications / Dialogs / Publish/Publish.xmlの横にあるコードです。
Sitecore.Client.dllのSitecore.Shell.Applications.Dialogs.Publish.PublishFormクラスのBuildLanguages()メソッド
また、Sitecore構成のCheckSecurityOnLanguagesがtrueに設定されていることを確認してください。
マルチサイトを実行していて、ブランチごとに異なる権限を持っている場合は、Publishing.CheckSecurityとPublishing.RequireTargetDeleteRightWhenCheckingSecurityがあることを確認してください。そうしないと、ユーザーはアイテムを相互公開できますが、これは希望どおりではありません。
http://sitecorebasics.wordpress.com/2011/04/12/publishing-security-basics/
[編集]@Ruud、アイテムへのロールアクセスを明確に拒否するべきではありません。代わりに、継承を解除する必要があります。そうすれば、ロールを複合した場合(つまり、ユーザーが複数のロールに属している場合)、ユーザーは引き続きそのアイテムにアクセスできます。アクセスを拒否すると、他の権限でそれを上書きすることはできなくなります。
Sitecore Worst Practicesブログシリーズ:セキュリティ
拒否が許可を上書きするのを防ぐために、継承を破ってアクセス権を付与することを優先して、アクセス権を拒否することは避けてください。
申し訳ありませんが、投稿に直接コメントするのに十分な担当者がいません。