Nếu bạn không muốn sử dụng SQL Express, tạo ra một cơ sở dữ liệu có sản phẩm nào cho trang web DotNetNuke trong tương lai.. Bạn sẽ sử dụng những người sử dụng sau này trong SharePoint nh
Trang 1Install DotNetNuke
If you have not already installed DotNetNuke, download a copy from here and install
it (you'll have to register) Even though DotNetNuke might not be your expertise, the installation is not harder than SharePoint installation Here are the basic steps:
1 Create a new DNS or hosts file entry for the future DNN site I am calling it:
dnn.zeppelinsoft.com.
2 Download DotNetNuke_x_y_z_Source.zip Unzip it, and set up an IIS site that points to the …/Website folder.
3 Be sure you use ASP.NET version 2.0 and that the Network Services user has permissions to modify that folder.
4 If you don't want to use SQL Express, create an empty database for the future DotNetNuke site.
5 Load your site into a browser, and follow the wizard Use Typical, and
configure it to use your newly created database Setting the database type and connection is the most important step:
1 Tạo một DNS mới hoặc tập tin host mục nhập cho trang web DNN trong tương lai Tôi gọi nó: dnn.zeppelinsoft.com.
2 Tải về DotNetNuke_x_y_z_Source.zip Giải nén nó, và thiết lập một trang web IIS trỏ đến thư mục Website /.
3 Hãy chắc chắn bạn sử dụng phiên bản 2.0 và ASP.NET rằng các dịch vụ mạng, người dùng có quyền để sửa đổi thư mục đó.
4 Nếu bạn không muốn sử dụng SQL Express, tạo ra một cơ sở dữ liệu có sản phẩm nào cho trang web DotNetNuke trong tương lai.
5 Load trang web của bạn vào một trình duyệt, và làm theo hướng dẫn Sử dụng tiêu biểu, và cấu hình nó để sử dụng cơ sở dữ liệu của bạn vừa được tạo
ra Thiết lập các loại hình cơ sở dữ liệu và kết nối là bước quan trọng nhất
Trang 26 Next, you will be asked to set the password and emails for two users: host and admin You will use these users later in SharePoint as site collection admins Tiếp theo, bạn sẽ được yêu cầu đặt mật khẩu và email cho hai người sử dụng: máy chủ lưu trữ và quản trị Bạn sẽ sử dụng những người sử dụng sau này trong SharePoint như các quản trị viên tập trang web.
Modify the DotNetNuke database to make
SqlRoleProvider work
There are two providers that we need to set in SharePoint in order to use DotNetNuke
as a user store:
1 Membership Provider: responsible for verifying user credentials, changing
passwords, etc As a Membership Provider, we'll use
SqlMembershipProvider (that ships with ASP.NET 2.0) DotNetNuke
Trang 3provides native support for it We'll just have to copy some web.config entries,
and we're done I'll show you that later in this article.
Co trách nhiệm xác minh chứng người sử dụng, thay đổi mật khẩu, vv Là một nhà cung cấp thành viên, chúng tôi sẽ sử dụng SqlMembershipProvider (mà tàu với ASP.NET 2,0) DotNetNuke cung cấp hỗ trợ cho nó Chúng tôi chỉ sẽ có sao chép một số mục web.config, và chúng tôi đang thực hiện Tôi sẽ cho bạn thấy rằng sau này trong bài viết này
2 Role Provider: responsible for role management, verifying user roles, etc A
role in Forms based authentication is similar to a user group in Active
Directory DotNetNuke doesn't provide native support for SqlRoleProvider (that ships with ASP.NET 2.0), but it does create all stored procedures used by
it The problem is that it does not populate tables used by SqlRoleProvider with data from its native role management tables There are two solutions to this problem:
Chịu trách nhiệm về vai trò quản lý, xác minh vai trò người sử dụng, vv Các hình thức dựa vào vai trò thẩm định tương tự như một nhóm người dùng trong Active Directory DotNetNuke không cung cấp hỗ trợ cho SqlRoleProvider
1 Use SqlRoleProvider in SharePoint and modify its corresponding SQL stored procedures in DotNetNuke to use its native role
management tables.
2 Create a new role provider that will directly use DotNetNuke native role tables.
I will use the first approach here We only need to modify the following SQL stored procs:
Tôi sẽ sử dụng phương pháp tiếp cận đầu tiên ở đây Chúng tôi chỉ cần phải sửa đổi được lưu trữ procs SQL sau:
• aspnet_Roles_GetAllRoles
• aspnet_Roles_RoleExists
• aspnet_UsersInRoles_FindUsersInRole
• aspnet_UsersInRoles_GetRolesForUser
• aspnet_UsersInRoles_GetUsersInRoles
• aspnet_UsersInRoles_IsUserInRole
I am making two assumptions here:
1 There is no table prefix for DotNetNuke tables You are asked about table prefix during DotNetNuke installation If you chose a prefix, then you will have to modify all the table references in my SQL script to include that prefix.
2 There are no sub-portals in DotNetNuke installation (for simplicity, of course) This means I use only the root portal (PortalID = 0) to get the users and roles definition.
And, here is the SQL sequence to do it (execute it against the DotNetNuke database):
Trang 4/****** Object: StoredProcedure [dbo].[aspnet_Roles_GetAllRoles]
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[aspnet_Roles_GetAllRoles] (
@ApplicationName nvarchar(256))
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN
select RoleName from dbo.roles
where
PortalID = 0
END
GO
/****** Object: StoredProcedure [dbo].[aspnet_Roles_RoleExists]
******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[aspnet_Roles_RoleExists]
@ApplicationName nvarchar(256),
@RoleName nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(0)
IF (EXISTS (SELECT RoleName FROM dbo.Roles WHERE LOWER(@RoleName)
= lower(RoleName)
AND Portalid = 0 ))
RETURN(1)
ELSE
RETURN(0)
END
GO
/****** Object: StoredProcedure [dbo]
[aspnet_UsersInRoles_FindUsersInRole] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Trang 5ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_FindUsersInRole]
@ApplicationName nvarchar(256),
@RoleName nvarchar(256),
@UserNameToMatch nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
DECLARE @RoleId int
SELECT @RoleId = NULL
SELECT @RoleId = RoleId
FROM dbo.Roles
WHERE
RoleName = @RoleName
and
PortalID = 0
IF (@RoleId IS NULL)
RETURN(1)
SELECT u.UserName
FROM
dbo.Users u,
dbo.UserRoles ur,
dbo.Roles r
WHERE
u.UserId = ur.UserId AND @RoleId = ur.RoleId
AND
ur.RoleID = r.RoleID
AND
r.PortalID = 0
AND
u.Username LIKE LOWER(@UserNameToMatch)
ORDER BY u.UserName
RETURN(0)
END
GO
/****** Object: StoredProcedure [dbo]
[aspnet_UsersInRoles_GetRolesForUser] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_GetRolesForUser]
@ApplicationName nvarchar(256),
@UserName nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications
Trang 6WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
DECLARE @UserId uniqueidentifier
SELECT @UserId = NULL
SELECT @UserId = UserId
FROM dbo.aspnet_Users
WHERE LoweredUserName = LOWER(@UserName) AND ApplicationId =
@ApplicationId
IF (@UserId IS NULL)
RETURN(1)
select
a.RoleName
from
dbo.Roles a
inner join dbo.UserRoles b on a.RoleID = b.RoleID
inner join dbo.Users c on b.UserId = c.UserId
where
a.PortalID = 0
and
c.Username = @UserName
order by a.RoleName
RETURN (0)
END
GO
/****** Object: StoredProcedure [dbo]
[aspnet_UsersInRoles_GetUsersInRoles] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_GetUsersInRoles]
@ApplicationName nvarchar(256),
@RoleName nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(1)
select a.UserName
from
dbo.Users a
inner join
dbo.UserRoles b on a.UserId = b.UserId
inner join
dbo.Roles c on b.RoleId = c.RoleId
where
c.RoleName = @RoleName
and
c.PortalId = 0
Trang 7RETURN(0)
END
GO
/****** Object: StoredProcedure [dbo]
[aspnet_UsersInRoles_IsUserInRole] ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[aspnet_UsersInRoles_IsUserInRole]
@ApplicationName nvarchar(256),
@UserName nvarchar(256),
@RoleName nvarchar(256)
AS
BEGIN
DECLARE @ApplicationId uniqueidentifier
SELECT @ApplicationId = NULL
SELECT @ApplicationId = ApplicationId FROM aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
IF (@ApplicationId IS NULL)
RETURN(2)
if (exists(select * from dbo.Users a inner join dbo.UserRoles b
on a.UserId = b.UserId
inner join dbo.Roles c on b.RoleId = c.RoleId
where c.RoleName = @RoleName and a.UserName = @UserName and c.PortalId = 0))
return(1)
else
return(0)
END
Phew, that wasn't too bad DotNetNuke is all set now to be used as a user store from SharePoint.
Create an extended SharePoint web application that uses Forms based authentication
Consider the scenario where you already have a SharePoint web application that uses Active Directory for authentication We'll extend this application to use users from DotNetNuke To do this, follow these steps:
Xem xét các kịch bản mà bạn đã có một ứng dụng web SharePoint rằng sử dụng Active Directory để xác thực Chúng tôi sẽ mở rộng ứng dụng này để sử dụng người dùng từ DotNetNuke Để làm điều này, hãy làm theo các bước sau
1 Create a DNS or hosts file entry for the future SharePoint site I am giving it a
creative name: sharepointdnn.zeppelinsoft.com.
2 Log in to Central Administration and go to the Application Management page Then, click on Create or Extend Web application.
Trang 83 Choose Extend an existing Web application In my case, I am extending an existing application called SharePointDNN.
1 Tạo một máy chủ DNS hay tập tin mục nhập cho trang web SharePoint trong tương lai Tôi cho nó một cái tên sáng tạo: sharepointdnn.zeppelinsoft.com.
2 Đăng nhập vào Trung tâm Hành chính và vào trang Quản lý ứng dụng Sau đó, nhấp vào Tạo hoặc Mở rộng ứng dụng web.
3 Kéo dài chọn một ứng dụng web hiện có Trong trường hợp của tôi, tôi đang
mở rộng một ứng dụng hiện có được gọi là SharePointDNN
Be sure that you do the following:
• Choose the right application from the Web Application drop-down.
• Specify port 80, and enter the name you created in the first step in the Host Header entry (you can create a new name if you wish).
• Choose the zone to be Internet.
.Chọn các ứng dụng ngay từ trình đơn thả xuống ứng dụng web.
• Chỉ định cổng 80, và nhập vào tên bạn đã tạo ở bước đầu tiên trong mục Host Header (bạn có thể tạo một tên mới nếu muốn).
• Chọn vùng được Internet.
Trang 9Modify SharePoint web.config files
Before setting our new extended application to use FBA with DotNetNuke, we need
to make several changes to the web.config file in our SharePoint FBA application as
well as in Central Administration Let's start with the extended application (in my
case, SharePointDNN.zeppelinsoft.com) Before making modifications, I suggest you make a backup There are three entries we need to steal from DotNetNuke web.config and one new entry we need add to, so I would suggest to open both web.config files in
Visual Studio and start doing the following:
Change the web.config for SharePoint FBA application:
Trang 101 Copy the connection string entry from DotNetNuke web.config.
Collapse
<connectionStrings>
<add name="SiteSqlServer"
connectionString="Data Source=(local);Initial
Catalog=DotNetNuke;
User ID=xxxxxx;Password=xxxxxx"
providerName="System.Data.SqlClient" />
</connectionStrings>
Paste it to the SharePoint web.config I changed the name of the connection
string to DNNSqlServer to make it more obvious for a web.config reader to
know that it is pointing to a DNN SQL Server Here is what's actually being
pasted into the SharePoint web.config:
Collapse
<! changed for FBA with DotNetNuke >
<connectionStrings>
<add name="DNNSqlServer"
connectionString="Data Source=(local);Initial
Catalog=DotNetNuke;
User ID=xxxxxx;Password=xxxxxx"
providerName="System.Data.SqlClient" />
</connectionStrings>
2 Copy the <membership> section from DotNetNuke, then we'll make a few creative changes such as change the name of the provider to
DNNMembershipProvider and the connection string to DNNSqlServer.
Initial membership entry in DotNetNuke looks like this:
Collapse
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SiteSqlServer"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="false"
passwordFormat="Encrypted"
applicationName="DotNetNuke"
description="Stores and retrieves membership data from the local Microsoft SQL Server database" />
</providers>
</membership>
Modified the membership entry in SharePoint:
Collapse
Trang 11<! changed for FBA with DotNetNuke >
<membership defaultProvider="DNNMembershipProvider"
userIsOnlineTimeWindow="15">
<providers>
<clear />
<add name="DNNMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="DNNSqlServer"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="false"
passwordFormat="Encrypted"
applicationName="DotNetNuke"
description="Stores and retrieves membership data from the local Microsoft SQL Server database" />
</providers>
</membership>
3 Add the <roleManager> entry This is not found in DotNetNuke, so you have
to manually add it It is important to set the connection string to
DNNSqlServer and the application name to DotNetNuke:
Collapse
<! changed for FBA with DotNetNuke >
<roleManager enabled="true" defaultProvider="DNNRoleProvider"> <providers>
<add name=" DNNRoleProvider "
connectionStringName="DNNSqlServer"
applicationName="DotNetNuke"
type="System.Web.Security.SqlRoleProvider,System.Web,
Version=2.0.0.0,Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a" />
</providers>
</roleManager>
4 This is very important: Copy the <machineKey> as it is from DotNetNuke
web.config into SharePoint web.config Overwrite the existing entry (You
have a backup, right?) <machineKey> is used to hash passwords, and it is specific to each machine and application Unless you set the passwordFormat attribute in DNNMembershipProvider to be Clear, the machineKey has to be identical.
Điều này là rất quan trọng: Sao chép <machineKey> vì nó là từ DotNetNuke web.config vào SharePoint web.config Ghi đè lên mục nhập hiện có (Bạn có một sao lưu, phải không?) <machineKey> được sử dụng để băm mật khẩu, và nó là đặc trưng cho mỗi máy và ứng dụng Trừ khi bạn thiết lập các thuộc tính
passwordFormat trong DNNMembershipProvider được Clear, machineKey phải được giống hệt nhau.
Change the web.config for the Central Administration application