注:
Xinsoft CMS 0.9版 是一个正在开发中的强大的内容管理系统。
支持无限级文章频道、专题,支持 Blog ,支持用户私有文章频道与站点公有文章频道之间的映射,初步支持Wiki,允许一篇文章存在多个版本和一个主版本,允许在一台服务器上基于一套CMS架设多个站点,支持对管理员的权限设置按照 GACL 列表进行,权限可向下继承和从中间截断。不仅仅支持树状拓扑的信息结构,也支持网状拓扑的信息结点。文字、附件、多媒体文件、RichText、定义值,通过一个统一的信息节点结构去处理、归类。
其中体现了一些本人对知识管理、社会化软件的设计理念。
面向高端应用,初显知识管理理念端倪
以下代码涉及到的是管理员权限设置。
这些代码可以作为学习触发器、存储过程、用户自定义函数的绝佳教程:)
表:
CREATE TABLE [Administrator] (
[uid] [int] NOT NULL ,
[uname] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[pwd] [char] (32) COLLATE Chinese_PRC_CI_AS NULL ,
[echoname] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[Flag] [int] NULL CONSTRAINT [DF_Administrator_Flag] DEFAULT (1),
[comment] [nvarchar] (250) COLLATE Chinese_PRC_CI_AS NULL ,
[varchar] (250) COLLATE Chinese_PRC_CI_AS NULL ,
[RegTime] [datetime] NULL CONSTRAINT [DF_Administrator_RegTime] DEFAULT (getdate()),
[LogTime] [datetime] NULL ,
[LogCount] [int] NULL CONSTRAINT [DF_Administrator_LogCount] DEFAULT (0),
CONSTRAINT [PK_Administrator] PRIMARY KEY CLUSTERED
(
[uid]
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [XcmsOpt] (
[ID] [int] NOT NULL ,
[schemaname] [varchar] (40) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_XcmsOpt_schemaname] DEFAULT ('catalog'),
[cname] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_XcmsOpt] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [XcmsOptItem] (
[OptID] [int] NULL ,
[ID] [int] NOT NULL ,
[MaskPos] [tinyint] NULL CONSTRAINT [DF_XcmsOptItem_MaskPos] DEFAULT (1),
[cname] [nvarchar] (40) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_XcmsOptItem] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
存储过程:
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE dbo.Proc_Administrator_AddUser
@uname varchar(20),
@upass varchar(250),
@echoname nvarchar(40),
@email varchar(250),
@comment nvarchar(250),
@flag int
AS
Begin
Declare @pwd char(32)
Declare @N int
Declare @uid int
set @uname=Lower( @uname )
select @N=Count(uid) from Administrator where uname=@uname
If @N<1
select @N=Count(uid) from Administrator where echoname=@echoname
If @N<1
Begin
Select top 1 @N=uid from Administrator order by uid desc
If @@RowCount>0
set @N=@N+1
Else
set @N=1
set @uid=@N
End
Else
set @uid=0
If @uid>0
Begin
Set @pwd=dbo.Xmd5( @upass )
insert into Administrator ( [uid] , [uname] , [pwd] , [echoname] , [flag] , [comment] ,
) values( @uid , @uname , @pwd , @echoname , @flag , @comment , @email )
End
Return( @uid )
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS OFF
GO
CREATE Proc Proc_Administrator_CheckLogin
@uname varchar(20)
, @upass varchar(80)
, @uid int output
, @echoname nvarchar(40) output
, @flag int output
As
Begin
-- Return:
-- -1 Uname Not Found
-- 0 Uname is Locked
-- -2 Upass is Error
-- 1 Success
Declare @N int
Declare @pwd char(32)
Set @uname=dbo.Secu_InputFilter_LevA ( @uname )
Select @uid=uid , @pwd=pwd , @echoname=echoname , @flag=flag from Administrator where uname=@uname
If @uid is null
Set @N=-1
Else
If @flag<1
Set @N=0
Else
Set @N=1
If @N=1
If dbo.Xmd5( @upass ) = @pwd
Set @N=1
Else
Set @N=-2
If @N=1
Update Administrator set LogTime=getdate() , LogCount=LogCount+1 where uid=@uid
Return( @N )
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE Proc_Administrator_RegTestCode
@uid int
, @RegTestCode char(32)
AS
Begin
Declare @uname varchar(20)
Declare @Comment nvarchar(250)
Declare @Flag int
select @uname=uname , @Comment=Comment , @Flag=Flag from Administrator where uid=@uid
If @Flag=0
If dbo.Xmd5( 'uname=' + @uname + ';RegTestCode=' + @RegTestCode + ';' ) = @Comment
Begin
Set @Flag=1
Update Administrator set Comment='' where uid=@uid
End
Else
Set @Flag=0
Update Administrator set Flag=@Flag where uid=@uid
Return( @Flag )
End
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO