程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 在DotNetNuke中加入組織架構(二)

在DotNetNuke中加入組織架構(二)

編輯:關於ASP.NET

組織架構首先一定是樹狀的,這就是為什麼我們要拋棄DotNetNuke原有的安全角色而重新另建一套的一個最主要的原因——當然,並不是拋棄,在之前說過,我們希望“安全角色”和“組織架構”可以各司其職,在我們的系統裡面各自發揮作用而已。

除了體現上下級關系的“部門”之外,我們還希望仍然保留一個“組”的概念。部門體現的是層級關系,而Group則是體現一種橫向的關系,比如,把所有的“部門”的負責人都放到一個“組”裡面,以方便選擇等。簡單來說,一種是體現現有實際組織機構的,另外一種則是為了實際工作方便而較為隨意的。看過(一)的細心的朋友可以看得出,我把這兩種關系都放在一個數據結構裡面了,僅僅是通過一個簡單的IsDept字段,來區分當前的架構到底是組,還是部門。組和部門可以任意嵌套,於是,有的時候,我們的組織架構看起來確實有點怪怪的:

在部門下面放一個組如果還覺得合理的話,那麼,在組下面放一個部門是什麼意思呢?

嗯,如果覺得沒意思的話,那就別這麼做嘛。

不希望出現在正式的架構中的組或者部門,我們可以將之“無效”,也就是灰掉;一方面是一些組織架構,如果不希望刪除(因為可能關聯了數據和權限)的話可以這麼做;另外一方面,我希望在工作流的流程裡面可以綁定一些只有對管理員才有意義的組而對一般用戶不可見,這樣的話,無效的組織架構,就不用給一般的用戶看到。

總之,我只用了兩張表,就完成了上述的組織架構:Department和DeptUser,這當然是受 DotNetNuke的啟發——用最精簡的數據結構完成最可擴展性的業務邏輯(崩潰,DotNetNuke有將近200張表、近千個存儲過程,還精簡?)用戶表當然是使用DotNetNuke的Users表了,所以才能將數據結果做的如此精簡。

Code

if not exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}RedStart_Department]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE {databaseOwner}[{objectQualifier}RedStart_Department]
(
[DeptID] [int] NOT NULL IDENTITY(1, 1),
[PortalID] [int] NOT NULL,
[ParentID] [int] NULL,
[DeptName] [nvarchar] (50) NOT NULL,
[DeptDescribe] [nvarchar] (200) NULL,
[DeptOrder] [int] NOT NULL,
[IsValid] [bit] NOT NULL DEFAULT(1),
[IsDept] [bit] NOT NULL DEFAULT(1),
[CreateDate] [datetime] NULL ,
[CreateUser] [int] NULL ,
)
ALTER TABLE {databaseOwner}[{objectQualifier}RedStart_Department] ADD CONSTRAINT [PK_{objectQualifier}RedStart_Department] PRIMARY KEY CLUSTERED ([DeptID])
CREATE NONCLUSTERED INDEX [IX_{objectQualifier}RedStart_Department] ON {databaseOwner}[{objectQualifier}RedStart_Department] ([PortalID])
ALTER TABLE {databaseOwner}[{objectQualifier}RedStart_Department] WITH NOCHECK ADD CONSTRAINT [FK_{objectQualifier}RedStart_Department_{objectQualifier}Portals] FOREIGN KEY ([PortalID]) REFERENCES {databaseOwner}[{objectQualifier}Portals] ([PortalID]) ON DELETE CASCADE NOT FOR REPLICATION
END
GO
if not exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}RedStart_DeptUser]') and OBJECTPROPERTY(id, N'IsTable') = 1)
BEGIN
CREATE TABLE {databaseOwner}[{objectQualifier}RedStart_DeptUser]
(
[DeptID] [int] NOT NULL,
[UserID] [int] NOT NULL,
[UserPrio] [int] NOT NULL,
[IsLead] [bit] NOT NULL DEFAULT(0),
[IsValid] [bit] NOT NULL DEFAULT(1)
)
ALTER TABLE {databaseOwner}[{objectQualifier}RedStart_DeptUser] ADD CONSTRAINT [PK_{objectQualifier}RedStart_DeptUser] PRIMARY KEY CLUSTERED ([DeptID], [UserID])
ALTER TABLE {databaseOwner}[{objectQualifier}RedStart_DeptUser] WITH NOCHECK ADD CONSTRAINT [FK_{objectQualifier}RedStart_DeptUser_{objectQualifier}RedStart_Department] FOREIGN KEY ([DeptID]) REFERENCES [{objectQualifier}RedStart_Department] ([DeptID]) ON DELETE CASCADE NOT FOR REPLICATION
ALTER TABLE {databaseOwner}[{objectQualifier}RedStart_DeptUser] WITH NOCHECK ADD CONSTRAINT [FK_{objectQualifier}RedStart_DeptUser_{objectQualifier}Users] FOREIGN KEY ([UserID]) REFERENCES [{objectQualifier}Users] ([UserID]) ON DELETE CASCADE NOT FOR REPLICATION
END

有了數據結構和概念之後,剩下的事情就是將之編碼出來的過程了,這個相對來說比較簡單一點,我們略過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved