Программно добавить претензию в список - PullRequest
1 голос
/ 26 октября 2011

Я написал небольшой фрагмент кода, который добавляет заявку на сайт в Sharepoint. Я поступаю так:

using (SPSite site = new SPSite(url)) 
        { 
            using (SPWeb web = site.OpenWeb())
            { 
                SPClaimProviderManager claimMgr = SPClaimProviderManager.Local; 
                if (claimMgr != null) 
                {
                    SPClaim claim = new SPClaim(type, claim_name, Microsoft.IdentityModel.Claims.ClaimValueTypes.String, SPOriginalIssuers.Format(SPOriginalIssuerType.ClaimProvider, provider)); 
                    string userName = claimMgr.EncodeClaim(claim); 
                    SPUserInfo info = new SPUserInfo 
                    { LoginName = userName, 
                        Name = name }; 

                    SPRoleAssignment roleAssignment = new SPRoleAssignment(info.LoginName, info.Email, info.Name, info.Notes); 
                    roleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions["Read"]); 
                    web.RoleAssignments.Add(roleAssignment); 
                    web.Update(); 
                } 
            } 
        } 

Довольно просто, но я бы хотел добавить претензию в список, который я создал. В настоящее время я использую SPSite и SPWeb для доступа к сайту, но мне нужно пойти глубже :) и я не могу найти способ сделать ...

Заранее спасибо!

1 Ответ

1 голос
/ 26 октября 2011

Поскольку оба, SPWeb и SPList, наследуют от SPSecurableObject, все, что вам нужно сделать, это загрузить объект SPList для того списка, для которого вы хотите изменить разрешения.

A SPList может быть загружен либо по URL , либо заголовком списка :

SPList listByTitle = web.Lists["Tasks"];
SPList listByUrl = web.GetList("/server/relative/Lists/Tasks");

В вашем примере:

        using (SPSite site = new SPSite(url)) 
        { 
            using (SPWeb web = site.OpenWeb())
            { 
                SPClaimProviderManager claimMgr = SPClaimProviderManager.Local; 
                if (claimMgr != null) 
                {
                    SPClaim claim = new SPClaim(type, claim_name, Microsoft.IdentityModel.Claims.ClaimValueTypes.String, SPOriginalIssuers.Format(SPOriginalIssuerType.ClaimProvider, provider)); 
                    string userName = claimMgr.EncodeClaim(claim); 
                    SPUserInfo info = new SPUserInfo 
                    { LoginName = userName, 
                        Name = name }; 

                    SPRoleAssignment roleAssignment = new SPRoleAssignment(info.LoginName, info.Email, info.Name, info.Notes); 
                    roleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions["Read"]); 
                    // web.RoleAssignments.Add(roleAssignment); 
                    // web.Update(); 

                    SPList list = web.Lists["TheListTitle"];
                    list.RoleAssignments.Add(roleAssignment);
                } 
            } 
        } 

Не требуется обновлять сеть или список после изменения назначения ролей.

...