在DotNetNuke中加入组织架构(三)
当我们将组织架构的功能开发完成之后,就可以在系统中添加组织架构了。
在 这里,有一点需要抱怨一下DotNetNuke,并且赞扬一下Joomla等CMS,Joomla和Drupal都是可以比较方便的增加管理模块的,也就 是非普通模块,而是后台管理的模块,如果大家到Joomla的网站上去看一下它的Extentions的话,就可以发现Joomla有多少管理模块了;但 是——,也可能是因为我的无知,我还不知道如何将我的某一个功能添加到DotNetNuke的“主机管理”或者“网站管理”的菜单下面,使之堂而皇之的成 为后台管理的一部分。当然,并不是DotNetNuke没有这部分的功能,我们在页面的继承IActionable.ModuleActions的时候, 完全可以指定某个菜单的权限为DotNetNuke.Security.SecurityAccessLevel.Admin或者是 DotNetNuke.Security.SecurityAccessLevel.Host,这样,就限定我们添加的菜单的权限只有主机管理员或者是网 站管理员才能够使用。但是,对于门户内统一的架构,其实不必从某一个模块进入,从“网站管理”进入,似乎更为合理一些。
在(二)中,我们给出了Department的数据结构(以下结构只是一部分,如果需要完整的数据结构,请参照《在DotNetNuke中加入组织架构(二)》:
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 ,
)
大家可以看到,和一般的模块不同,在我们的数据结构中,没有一般模块都会有的ModuleID,而有 PortalID,这就说明了,我们的组织架构的数据结构,是整个Portal通用的,和某个模块完全无关,因为我们希望我们的这个结构可以为所有的模块 所用(如果可以的话),相对来说,比模块的数据结构要高一个级别,这就是为什么我们希望这个功能(如果单独列为一个功能的话)可以在网站管理中出现。
类似的需求应该是很多的,所以,DotNetNuke的后台管理的模块,应该也可以由程序员自行添加才对。
好了,以上只是一点牢骚而已,为了使用这个功能,我们仍然从模块的菜单进入,也就是说,为了使用这个功能,我们要有至少一个模块,然后点击模块的快捷菜单,调出此功能。
由于功能较多,所以,我在进入之后,又增加了一层功能的选择
我们最终出现的组织架构,可能是如下图所示这样:
在进行管理的时候,可以无限层级的增加,并且可以将暂时不需要的机构禁用掉。树形的架构比DotNetNuke的安全角色更符合我们的实际情况。
而用户管理则是要对我们的另外一个数据结构,也就是“组织结构—用户表”进行维护了,如下图所示:
这个模块仍然有改进的空间,我很喜欢DotNetNuke的这个功能
在 这里,有一点需要抱怨一下DotNetNuke,并且赞扬一下Joomla等CMS,Joomla和Drupal都是可以比较方便的增加管理模块的,也就 是非普通模块,而是后台管理的模块,如果大家到Joomla的网站上去看一下它的Extentions的话,就可以发现Joomla有多少管理模块了;但 是——,也可能是因为我的无知,我还不知道如何将我的某一个功能添加到DotNetNuke的“主机管理”或者“网站管理”的菜单下面,使之堂而皇之的成 为后台管理的一部分。当然,并不是DotNetNuke没有这部分的功能,我们在页面的继承IActionable.ModuleActions的时候, 完全可以指定某个菜单的权限为DotNetNuke.Security.SecurityAccessLevel.Admin或者是 DotNetNuke.Security.SecurityAccessLevel.Host,这样,就限定我们添加的菜单的权限只有主机管理员或者是网 站管理员才能够使用。但是,对于门户内统一的架构,其实不必从某一个模块进入,从“网站管理”进入,似乎更为合理一些。
在(二)中,我们给出了Department的数据结构(以下结构只是一部分,如果需要完整的数据结构,请参照《在DotNetNuke中加入组织架构(二)》:
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 ,
)
大家可以看到,和一般的模块不同,在我们的数据结构中,没有一般模块都会有的ModuleID,而有 PortalID,这就说明了,我们的组织架构的数据结构,是整个Portal通用的,和某个模块完全无关,因为我们希望我们的这个结构可以为所有的模块 所用(如果可以的话),相对来说,比模块的数据结构要高一个级别,这就是为什么我们希望这个功能(如果单独列为一个功能的话)可以在网站管理中出现。
类似的需求应该是很多的,所以,DotNetNuke的后台管理的模块,应该也可以由程序员自行添加才对。
好了,以上只是一点牢骚而已,为了使用这个功能,我们仍然从模块的菜单进入,也就是说,为了使用这个功能,我们要有至少一个模块,然后点击模块的快捷菜单,调出此功能。
在进行管理的时候,可以无限层级的增加,并且可以将暂时不需要的机构禁用掉。树形的架构比DotNetNuke的安全角色更符合我们的实际情况。
而用户管理则是要对我们的另外一个数据结构,也就是“组织结构—用户表”进行维护了,如下图所示:
(人员管理,为了体现DNN的多语言,我们特意截取了一个E文版界面)
有了这几个界面,我们基本上就完成了从组织架构,到人员从属的整个管理功能了。这个模块仍然有改进的空间,我很喜欢DotNetNuke的这个功能
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端