Kaneboy's Blog

SharePoint & Office Zealot
随笔 - 361, 评论 - 3663, 引用 - 201

导航

关于






Passed:
SPS2003 Infrastructure√
SPS2003 Custom Applications√
TS : WSS3.0 Configuration√
TS : WSS3.0 App Development√
TS : MOSS2007 Configuration√
TS : MOSS2007 App Development√
MCPD : Web Development√

此Blog中的文章和随笔只代表作者某一时间内的个人观点或结论,不代表任何公司立场和观点,也对其正确性没有任何担保或假设。(版权声明:作者原创文章和随笔的转载,请知会作者。)

点击这里查看此blog所有SharePoint文章!

SharePoint 2007 Starter Page

SharePoint External Binary Storage
QuickPart : 用户控件包装器 for SharePoint2007






标签

每月存档

最新留言

广告

 

在SharePoint Portal Server 2003的时代,它被说得最多的一个问题就是其用户系统必须使用Active Directory,我们必须在域里面为用户创建相应的AD账号,然后才能将AD账号添加为SharePoint站点用户。如果企业已经部署了AD,那么这不会是一个多大的问题(反而会成为其一个优点),但是对于没有部署AD的企业,或者要将SharePoint站点发布到Internet上的场景,这就是一个不小的问题了。

幸好SharePoint Server 2007中已经完全支持定制的用户管理模块,它使用了ASP.NET 2.0的Membership Provider机制来作为其用户管理的底层机制,这样就带给了我们非常大的灵活性。假如在企业中已经存在了一套用户认证系统(比如某某LDAP服务器,或者某某OA系统),那么我们可以很容易的让SharePoint Server 2007使用同一套用户认证系统,这样,SharePoint Server 2007本身不必要存储用户的信息。当然,通过Membership Provider机制,你也可以将用户名和密码保存在某一个数据源中(比如SQL Server数据库)。

首先,我们要用Visual Studio 2005编写一个定制的Membership Provider,方法我就不多说了,MSDN和网络上都有足够详细的文档来描述如何创建一个Membership Provider。你要做的仅仅是创建一个普通的类,然后让它继承自System.Web.Security.MembershipProvider,然后再实现所有需要实现的方法即可。实际上,SharePoint Server 2007并不会使用每一个方法,如果我记得没错的话,它主要调用的方法包括:FindUsersByName(), GetAllUsers(), GetUser(), ValidateUser()等。

为了说明问题,配合演示,我编写了一个最简单的TextFileMembershipProvider,将编译得到的程序集部署到服务器的GAC中。TextFileMembershipProvider从一个文本文件中得到用户的用户名和密码信息,这个文本文件就如下图所示:



然后打开要使用这个TextFileMembershipProvider的SharePoint站点集所对应的IIS网站的磁盘根目录下的web.config文件,在“<system.web>”节点下面添加相应的MemberShip节点:

<membership defaultProvider="TextFileMembershipProvider">
  <providers>
    <add name="TextFileMembershipProvider" type="MOSSSecurity.TextFileMembershipProvider, MOSSSecurity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1686c4895244ca01" description="" filePath="C:\Inetpub\wwwroot\wss\VirtualDirectories\81\Users.txt" />
  </providers>
</membership>


然后打开“SharePoint 3.0管理中心”所对应IIS网站的磁盘根目录下的web.config文件,如上面所说的再做一遍。

看到这里,你可能要犯嘀咕了,在SharePoint站点集的web.config上添加这个membership说明嘛,还有些道理,因为我们要在这个站点集上使用这个定制的用户管理模块嘛,但是对“SharePoint 3.0管理中心”这个站点的web.config下手又有和用意呢?简单说来这是因为,我们必须要让“SharePoint 3.0管理中心”这个站点也能够识别TextFileMembershipProvider所提供的用户信息,后面有这么做的详细理由。

执行一下iisreset之后,用IE打开“SharePoint 3.0管理中心”,然后在“应用程序管理”中找到“验证提供程序”,点击进去,然后更改上方的“Web应用程序”为我们希望使用TextFileMembershipProvider的SharePoint站点集所使用的Web应用程序,然后点击页面上的“默认”链接,在出现的更改页面中输入我们想要这个Web应用程序使用的MembershipProvider的名字,同时将验证类型改成表单验证(Forms验证),确定即可。



改完之后,验证提供程序配置界面中就会显示我们的Web应用程序使用的,是“TextFileMembershipProvider”啦。

 

现在,那个想定制的SharePoint站点已经使用我们编写的TextFileMembershipProvider了,但是,我们会遇到一个问题,如果我们现在去访问那个站点,那么那个站点会要求我们登录,但是由于到现在为止,TextFileMembershipProvider能够提供的任何一个用户都不是那个站点的用户,也就说在那个SharePoint站点中没有任何权限,所以我们总是不能登录到那个SharePoint站点中。

解决这个问题的方法,就是在管理中心的“Web应用程序的策略”中,配置一个TextFileMembershipProvider能提供的用户对那个SharePoint站点具有完全控制的权限,然后我们就可以使用那个用户登录到SharePoint站点中了。顺便说一下,“Web应用程序的策略”中配置的用户权限信息,具有最大的优先权。

在管理中心里面打开“应用程序管理”页面上的“Web应用程序的策略”链接,然后点击“添加用户”,选对要定制的Web应用程序,然后在下面的选择区域下拉框中选中“默认”,“下一步”。

 

在“用户”文本框中输入通过TextFileMembershipProvider能够获取一个用户名,然后点击一下下面的“检查名称”,如果配置没有问题,这时SharePoint Server 2007是能够通过TextFileMembershipProvider来确认这个用户的信息的(这也就是我们需要在“SharePoint 3.0管理中心”的web.config中也加上“TextFileMembershipProvider”配置项的原因,否则在这里,“SharePoint 3.0管理中心”不会认通过“TextFileMembershipProvider”提供的用户),然后选中页面下方的“完全控制”,“完成”。



现在,我们就可以访问要定制的SharePoint站点了,由于它被配置为使用表单验证,所以当我们访问它时,会自动被引导到一个登录页面。如果没有看到下面的登录页面,确认一下SharePoint站点的web.config文件中有如下的配置项:

<authentication mode="Forms">
  <forms loginUrl="~/_layouts/Login.aspx" />
</authentication>


 

填入正确的用户名和密码(在我的这个演示里面,就是那个文本文件中的用户信息,呵呵),然后就可以登录到SharePoint站点中了。

 

接着,你就可以到SharePoint站点的站点设置的用户管理里面,为这个站点添加更多的用户了。

怎么样,是不是很容易呢?创建定制的用户组管理模块的方法和这一样,为它编写一个定制的RoleProvider,然后在web.config中添加相应的配置项即可。

演示所用的TextFileMembershipProvider源码下载
ASP.NET 2.0 Membership介绍(博客园hfj1223著)

TextFileMembershipProvider源码下载:

打印 | 张贴于 2007-01-19 19:54:00 | Tag:SharePoint

留言反馈

#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
我也出现了kimi的问题

我按照你的例子做了遇到一个问题,就是在“SharePoint 3.0管理中心”的“Web应用程序的策略”里可以找到Users.txt文档里的username并且可以分配权限,可是在登陆SharePoint站点集时却总是显示“HTTP 错误 403 - 禁止访问”
请教这该如何修改,谢谢!
2007-09-17 11:48:00 | [匿名用户:kizuki]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
fffffffffffffffffffff
2007-09-15 03:28:00 | [匿名用户:baixiaobao]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
Kaneboy,为什么不能下载TextFileMembershipProvider哦?我也注册了,可是就是404 forbidden
哪位兄弟已经下载了,能给我发一份好么。Thx!
我的邮箱:bupt.zhutongliang@gmail.com
2007-08-24 16:25:00 | [匿名用户:adam]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
下载不了源码啊,说是没有权限访问
2007-07-06 10:25:00 | [匿名用户:iolia131]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
为什么我下载不了那个源码?建立一个普通类就可以写代码了?不需要引用membership了?membership在哪里引用呢?
2007-07-03 16:49:00 | [匿名用户:jian]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
为什么没有重写Membership Provider的实例呢
2007-06-21 16:18:00 | [匿名用户:凌波]
#SharePoint 2007 采用表单验证 (1) --失败:( 编辑
最终的目标是要跳过SharePoint的windows验证(AD),使用我们制定的验证防方式,比如用户信息存储在我们制定的SQLSERVER或Oracle等地方.看到网上一篇文章在SharePoi...
2007-03-28 16:28:00 | [匿名用户:skywind]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
我简单做了做(Text那个),但是,后台V3都能添加用户,但前台(发布的网站),就是不能用Users.txt中的用户登录,不知怎么解决?
xiexie!
2007-03-28 15:51:00 | [匿名用户:skywind]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
To kongjs, 你的后台的web.config中,没有加上provider的声明。
2007-03-28 15:34:00 | [匿名用户:skywind]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
照你的步骤做了,到“应用程序管理”-“Web应用程序的策略”-“添加用户”时,输入在users.txt文件中包含的用户名,却提示找不到用户。什么原因??谢谢
2007-03-12 22:03:00 | [匿名用户:kongjs]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
answer my own question, it works by not setting the role and rule.
2007-02-13 23:27:00 | [匿名用户:yxg]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
接上:


点击文章1.1.1后,如下界面:
-------------------------
目录1 | 文章1.1.1标题
子目录1.1 | 文章1.1.2简介:
子目录1.2 |
目录2 | 文章附件下载链接
子目录2.1 |
子目录2.2 | 评论框


如此简单的需求,sharepoint难道都搞不定?
目前是用列表模板可以实现右边的功能
启用树视图能实现左边的功能

但这两者无法兼得!即列表没有层次化目录结构,文档库没有文档描述功能

大侠有解决办法吗?
2007-02-07 21:33:00 | [匿名用户:端木]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
楼主,借贵宝地问一个问题:

我用WSS3.0建了一个网站,主要做文档管理。可现有文档库模板都是直接提供文档下载。即在文档列表上一点击,就直接弹出下载对话框。

我希望的是:
在页面最左边是个树形的层次结构目录,里面可以象资源管理器那样收缩。选中一个子目录后,在页面中间部分显示该目录的标题列表,点击标题后进入单个的文件页面,该页面上先是文档简介,再是提供附件下载,最后是文档评论。

即如下规划

-------------------------
目录1 | 文章1.1.1
子目录1.1 | 文章1.1.2
子目录1.2 | 文章1.1.3
目录2 | 文章1.1.4
子目录2.1 |
子目录2.2 |

2007-02-07 21:32:00 | [匿名用户:端木]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
接上:


点击文章1.1.1后,如下界面:
-------------------------
目录1 | 文章1.1.1标题
子目录1.1 | 文章1.1.2简介:
子目录1.2 |
目录2 | 文章附件下载链接
子目录2.1 |
子目录2.2 | 评论框


如此简单的需求,sharepoint难道都搞不定?
目前是用列表模板可以实现右边的功能
启用树视图能实现左边的功能

但这两者无法兼得!即列表没有层次化目录结构,文档库没有文档描述功能

大侠有解决办法吗?
2007-02-07 21:32:00 | [匿名用户:端木]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
请教一个匿名的问题,我写了一个webpart,下拉选择城市列表后级联获取该城市下区的信息,但匿名访问时提示登陆,相应的城市列表,区列表都可匿名访问,不知什么原因?
2007-02-04 17:14:00 | [匿名用户:offline]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
我来回答你这个问题吧,在登陆时只要选中登陆界面中“自动登陆”前面的辅选框,在单击登陆按钮就可以了。
2007-01-29 09:08:00 | [匿名用户:Kimi]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
请问在<system.web>节点下面的具体什么位置添加相应的MemberShip节点?
2007-01-27 11:14:00 | [匿名用户:Kimi]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
你好,经再次测试估计是我发布表单出现的问题,已经解决,谢谢。
2007-01-27 00:24:00 | [匿名用户:siugwan]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
已经成功设置自己的MembershipProvider,但无法在WSS上新建SHAREPOINT表单,也无法发布表单到服务器及客户端无法提交表单,估计是改用Forms验证后在Infopath上验证没有通过,会有这样的问题吗?
2007-01-27 00:16:00 | [匿名用户:siugwan]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
Hi,kaneboy!

我按照你的例子做了遇到一个问题,就是在“SharePoint 3.0管理中心”的“Web应用程序的策略”里可以找到Users.txt文档里的username并且可以分配权限,可是在登陆SharePoint站点集时却总是显示“403务权登陆错误”
请教这该如何修改,谢谢!
2007-01-26 10:37:00 | [匿名用户:Kimi]
#用几天时间自己写应用于MOSS2007的Membership Provider 编辑
第一天看了Kaneboy的《在SharePointServer2007中创建定制的用户管理模块》,于是动手测试,一切配置完毕在输入完用户名和密码后,点登录按钮却出现下列提示:Thegivena...
2007-01-23 10:42:00 | [匿名用户:带电作业]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
Kaneboy, sorry just check your blog.

What you asked is not really as my original statement. I mean that a 用户 can log in other 站点集 when he inputs his user name and password again in the "Sign In" of the other 站点集.

I tried your statement and find your statement works if I check the "Sign me in automatically" Check box when the user log in his first 站点集.

thanks
2007-01-22 19:06:00 | [匿名用户:yxg]
#[测试]自己写应用于MOSS2007的Membership Provider 编辑
看了Kaneboy的《在SharePointServer2007中创建定制的用户管理模块》,于是动手测试,一切配置完毕在输入完用户名和密码后,点登录按钮却出现下列提示:Thegivenasse...
2007-01-22 17:59:00 | [匿名用户:带电作业]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
to yxg:
您的意思是用户只要登录了一个站点集,那么就可以直接浏览另外一个站点集而不需要登录?
2007-01-22 11:19:00 | [匿名用户:kaneboy]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
To yxg:

你可以好好研究下2007/3.0里的权限结构

To Johnny Hu :

可以同时使用两个provider
2007-01-20 21:58:00 | [匿名用户:有些伤感]
#回复: 在SharePoint Server 2007中创建定制的用户管理模块 编辑
如果平时用AD验证为主,给临时用户用Web验证。能两者同时选吗?
还是得自己写provider实现?
因为我们的AD非常的大,而且temp vendor用户是没有AD ID的。自己写真岂不是非常痛苦。
2007-01-20 21:23:00 | [匿名用户:Johnny Hu]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8