DotNetNuke 対応ホスティングサービスに、「at link 専用サーバサービス」を追加
DotNetNuke.jp 掲示板は、すべての DotNetNuke ユーザーのための情報共有の場です。単に質問・回答の場ではありませんし、回答義務もございません。運営メンバーも含め、DotNetNuke を日々学んでいる状況です。質問をする場合は、まずインターネットなどで自分自身でお調べいただき、その情報を共有する事をこころがけてください。
お世話になります。
http://dotnetnuke.jp/tabid/263/forumid/29/threadid/2494/scope/posts/Default.aspx
の続きのようなものですが、アドバイスいただけますでしょうか。
やりたいことは、ポータル内のタブとそのタブ内にあるモジュールの閲覧権限の状態をループで取得して、権限がある場合にはリストに入れ、なければ入れないというものです。要はタブ以下のモジュールまで含めたメニューのようなナビゲーションモジュールを生成しようとしていると考えてもらえればよいかと思います。
権限は関係なくリスト化する方法は、前掲のスレッドで回答いただいた内容でできるようになりました。次は各タブ、モジュールの権限を取得する方法ですが、ここで躓いています。
タブについては、とりあえず以下のような方法で判定はできるようになりました。
' Tabの情報。実際はDotNetNuke.Common.GetPortalTabsで取得した情報を入れています Dim tab As DotNetNuke.Entities.Tabs.TabInfo If tab.AuthorizedRoles.Contains("All Users") = True Then ' 「All Users」が権限に入っていたら処理 End If
これも、もっと他に良い方法がありそうですが、とりあえずできているので良しとします。
次にこのIf文の中で、更に内部にあるモジュールの閲覧権限を判定しますが、モジュールリストは前掲のスレッドで教えていただいたもので取得し、以下の変数にセットします。
Dim moduleInfo As DotNetNuke.Entities.Modules.ModuleInfo
次に権限の判定ですが、同様に
If moduleInfo.AuthorizedRoles.Contains("All Users") = True Then ' 「All Users」が権限に入っていたら処理 End If
とやってみても、うまく判定できません。調べてみるとAuthorizedRolesには何も入っていないようです。
このあたりどうやって判定したらよいのでしょうか?上の方法でなく、全く別の方法でもかまいません。
よろしくお願いします。
私も、DNNを勉強している富山と申します。
お役にたてるかわかりませんが、
以下のように、moduleInfo.AuthorizedViewRoles , moduleInfo.AuthorizedEditRoles
には、値が入っているようです。
Dim tabInfo As DotNetNuke.Entities.Tabs.TabInfo = DotNetNuke.Common.Globals.GetPortalSettings.ActiveTab() Label1.Text = tabInfo.AuthorizedRoles + "<br/>"
For Each moduleInfo As DotNetNuke.Entities.Modules.ModuleInfo In tabInfo.Modules() Label1.Text += moduleInfo.ModuleTitle & "<br/>"
Label1.Text += "[1." + moduleInfo.AuthorizedViewRoles + "]<br/>"
Label1.Text += "[2." + moduleInfo.AuthorizedEditRoles + "]<br/>"
Label1.Text += "[3." + moduleInfo.AuthorizedRoles + "]<br/>"
Next
富山様ありがとうございます。
質問の前にAuthorizedViewRoles はやってみたのですが、そちらにも何も入っていなかったように思います。
恐らくですが、DotNetNuke.Common.Globals.GetPortalSettings.ActiveTab()のTabInfoと私のやり方では取得した情報が若干違うのだと思われます。(前回の質問もそういうようなことが原因でしたので)
とりあえず暫定処置として、DotNetNukeのクラスは使用せず、直接データベースにSQLのクエリを発行してタブ内のモジュール権限を取得するようにしています。これでも良いといえば良いのですが、本来はどうなのかやっぱり気になりますので、解決できれば書き直したいと思っています。
ちなみに何でこんなことをしているかですが、簡易的なモバイル表示用モジュールを作るためです。モバイルでは表示できる文字数が多くないので、タブ単位ではなくモジュール単位で表示した方がよいだろうということで表示中のタブ内のモジュールを列挙して個別にリンクするモジュールを作っております。一応完成はしたものの、ちょっと中途半端なのでどうしようか考え中です。
SHIMIZUさん。こんにちは。
再度はずしていた場合は、はずかしいのですが、DNNを勉強中の者のためお許しください。
DNNのソースを見て、タブと、モジュールと、権限を表示する処理を作ってみました。(自信なし)
Dim objModules As New ModuleController Dim objModule As New ModuleInfo
Dim _portalSettings As PortalSettings = GetPortalSettings()
'Get the Pages Dim tabs As ArrayList = GetPortalTabs(_portalSettings.PortalId, True, True, False, False, False) Dim tab1 As DotNetNuke.Entities.Tabs.TabInfo
Label1.Text += "<br/><br/>Count=" & tabs.Count & "<br/>"
For Each tab1 In tabs
Label1.Text += "--- Tab1:" & tab1.TabID.ToString & "<br/>" Label1.Text += "--- Auth:" & tab1.AuthorizedRoles.ToString & "<br/>"
For Each kvp As KeyValuePair(Of Integer, ModuleInfo) In objModules.GetTabModules(tab1.TabID) objModule = kvp.Value
Label1.Text += "--- Title:" & objModule.ModuleTitle & " ---<br/>" Label1.Text += "[1." & objModule.AuthorizedViewRoles & "]<br/>" Label1.Text += "[2." & objModule.AuthorizedRoles & "]<br/>" Label1.Text += "[3." & objModule.AuthorizedEditRoles & "]<br/>" Next Next
富山さん。
わざわざコードを書いて試していただいたようでありがとうございます。
確かにこれでできました。すばらしいです!コードがかなりスッキリしました。
私はC#使いで、VBの文法がほとんどわからずにやっているため、コードのちょっとした違いがどう関係するのか分からないのですが、見たところほとんど同じような情報を取ってきているように見えて、中に入っているデータが違う(プロパティとしては存在するのに値が入っていない?)というのがいまいちよく分からないところです。
でも、値もとれたし、とりあえずよしとして、中身はまた勉強してみることとします。
どうもありがとうございました。