DevExpress Technical Exchange Group 2:775869749グループディスカッションへようこそ
DevExpress v20.1フルバージョンをダウンロード
DevExpress Universal Subscriptionには、600以上のUIコントロール、レポートプラットフォーム、DevExpress Dashboard eXpressAppフレームワーク、CodeRush for Visual Studio、一連の補助ツールなど、.NET開発に必要なすべてのプラットフォームコントロールがあります。
受賞歴のあるソフトウェア開発プラットフォームDevExpress Universalは、2020年に新しいv20.1をリリースします。最新バージョンには、多くの新製品と数十のインパクトのある機能があり、デスクトップ、ウェブ、モバイルアプリケーション向けの直感的なソリューションと包括的なソリューションを提供できます。さまざまな使用シナリオ。体験してみませんか?クリックしてダウンロード>>
システムの背景
- 平台:フレームワーク(XAF&XPO)
- 製品:DeXpressApp Framework
当社の セキュリティシステムは 、特定のユーザーが自分のナビゲーション権限を設定することにより、ナビゲーション項目を非表示にすることができます。これらの権限は、2つのモードで構成することができます。
v16.2以降、さまざまなナビゲーション項目にナビゲーション権限を割り当てることができます。デフォルトでは、この機能はウィザードで作成された新しいプロジェクトで有効になっています。古いバージョンからアップグレードするときに有効にするには、SecurityStrategy.SupportNavigationPermissionsForTypesオプションをfalseに設定する必要があります。プロジェクトがEntity Frameworkに基づいている場合は、データベースも更新する必要があります。
v16.1以前のバージョンでは、[タイプのアクセス許可]設定で提供されるAllowNavigateオプションを使用して、ナビゲーションのアクセス許可を特定のオブジェクトタイプに割り当てることができます。現在のユーザーがこのタイプに移動する権限を持っていない場合、対応するタイプに固有のすべてのナビゲーション項目がナビゲーションコントロールから削除されます。古いプロジェクトをv16.2以降にアップグレードすると、このモードはデフォルトで有効になります。ウィザードで作成した新しいプロジェクトでそれを有効にするには、アプリケーションデザイナーを開き、SecurityStrategy.SupportNavigationPermissionsForTypesプロパティの値をfalseに変更します。
この記事では、最初のモードを手動で実装する方法について説明します。プロジェクトで使用されるXAFバージョンがまだナビゲーション許可機能を実装していない場合は、この記事で説明する方法が役立ちます。
注:この例で提供されているソリューションを使用してバージョン16.2にアップグレードすると、このコードが正しく機能しなくなる可能性があります。この場合、この記事の最後にある提案を使用してください。
XAFバージョンが16.2より前で、個々のナビゲーションアイテム(たとえば、DashboardViewまたは特定のListViewモデル)に権限を付与する必要がある場合は、以下で説明するソリューションを使用して、セキュリティシステムの機能を拡張してください。この記事では、HiddenNavigationItemsプロパティを使用して、IDによってナビゲーション項目を非表示にできます。IDは、役割クラスに追加されます。
この記事で示したShowNavigationItemController.SynchItemWithSecurityメソッドをオーバーライドする方法は、セキュリティシステムに直接関連しないタスクにも適用できます。このようにして、ナビゲーション項目を非表示にしたりカスタマイズしたりできます。
実装手順:
- カスタムのアクセス許可タイプNavigationItemPermissionを実装します。これを使用して、特定のナビゲーションアイテムのアクセス許可をそのIDを通じて確認できます。
- カスタム権限リクエストの実装-NavigationItemPermissionRequest-このリクエストは、現在のユーザーが特定のナビゲーションアイテムにアクセスする権限を持っているかどうかを確認するために送信されます。
- カスタムのアクセス許可要求プロセッサNavigationItemPermissionRequestProcessorを実装します。これは、現在のユーザーが受信したアクセス許可要求に対するアクセス許可を持っているかどうかを判断します。
- HiddenNavigationItemsプロパティを使用して、カスタムロールを実装します。GetPermissionsメソッドを使用して拡張し、HiddenNavigationItemsプロパティの値に基づいてNavigationPermissionインスタンスを作成します。
- アプリケーション設計者のセキュリティシステムのRoleType属性でカスタムロールを指定します。
- Program.csファイルとGlobal.asax.csファイルのSecurityStrategy.CustomizeRequestProcessorsイベントを処理することにより、許可要求プロセッサがアプリケーションに登録されます。
- ShowNavigationItemController-CustomShowNavigationItemControllerの下位クラスを実装し、そのSynchroItemWithSecurityメソッドを書き換えて、CustomSecurityRole.HiddenNavigationItemsプロパティで禁止されているナビゲーション項目を無効にします。
プロジェクトでこれらの手順を実行した後、HiddenNavigationItemsプロパティを持つロールを目的のユーザーに割り当てて、特定のナビゲーションアイテムへのアクセスを制限できます。
注:この記事は、PermissionPolicyRoleクラスとPermissionPolicyUserクラスに基づいています。ソリューションウィザードで許可/拒否のアクセス許可ポリシーを選択すると、セキュリティシステムはこれらのクラスを使用します。プロジェクトが以前のXAFバージョン(16.1より前のバージョン)で作成され、SecuritySystemRoleクラスとSecuritySystemUserクラスを使用していた場合、これらのクラスの例を表示するには、下のコンボボックスでバージョン番号を変更してください。
v16.2のアップグレード手順:
このバージョンにアップグレードすると、この例の古いバージョンで使用されていたコードが機能しなくなる場合があります。この問題を解決するには、サンプルの新しいバージョンから関連するコードをコピーするか、次のメソッドを追加してCustomShowNavigationItemControllerクラスを変更してください。
C#
保護されたオーバーライドbool SyncItemsWithRequestSecurity(DevExpress.ExpressApp.Actions.ChoiceActionItemCollection items){ base.SyncItemsWithSecurity(items); trueを返します。 }
Visual Basic
プロテクトオーバーライド機能SyncItemsWithRequestSecurity(ByVal items As DevExpress.ExpressApp.Actions.ChoiceActionItemCollection)As Boolean MyBase.SyncItemsWithSecurity(items) Return True End Function