<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    探索與發現

    研究java技術

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      83 隨筆 :: 0 文章 :: 109 評論 :: 0 Trackbacks

    基于Sharepoint做一個客戶管理的系統,由于客戶方對權限的要求非常嚴格,所以不得不自己去定義網站的權限,好在Sharepoint提供的權限系統比較完善,我們所創建的權限包括從創建SPWeb到創建SPListItem均實現了一遍,也算是順利的解決了問題。項目做到第一階段,談談自己的一些認識。

     

    在開始之前先明確幾個類或者定義:

    Sharepoint權限系統采用 權限——角色 ——對象——關聯 的概念,即:對于一個對象(如:SPWeb,SPList,SPListItem),可以通過添加某個已經包含了角色(SPRoleDefinition)的關聯(SPRoleAssignment)而更改該對象的權限,而角色(SPRoleDefinition)則是提前通過SPWeb.RoleDefinitions添加到網站內的,注意:只有SPWeb有此屬性可以添加角色定義,其他對象如SPSiteSPListSPListItem均不能添加角色定義,當然他們也不需要。

     

    相關類:

     

    用戶或用戶組:SPPrincipal 擴展了兩個子類:SPUserSPGroup

    權限基類:SPBasePermissions,通過或計算合成一個自定義的權限,注意:需要編輯權限的前提是有查看權限;

    角色類:SPRoleDefinition,采用web.RoleDefinitions.Add(definition)的方式添加角色;

    關聯類:對于某個SPPrincipal添加一個SPRoleDefinition的角色,然后再將該關聯添加到對象上去,注意:在未將該關聯添加到對象上時,該關聯都無效。

     

    首先定義自己的權限系統,我定義了四個級別的角色,本別具有權限:查看、新建、編輯、刪除,這四個權限要遠低于Sharepoint本身的權限,這里以新建角色為例說明: 同時定義了負責向網站添加角色Register類,每一個角色都會對應一個Register類,是為了方便權限的擴展,采用依賴倒置。

    為對象分配權限:參數SPListItem 也可以是 SPWebSPList,權限的分配一般是在對象剛剛創建后來實現,如

    SPWebTemplate template = web.Site.GetCustomWebTemplates((uint)web.Locale.LCID)[WebTemplate];

    SPWeb newWeb = RootSPWeb.Webs.Add(rurl, customerName, string.Empty, (uint)2052, template, true, false);

    此時就應該對該newWeb做權限操作。而SPListItem的操作一般是在SPItemEventReceiver的ItemAdded事件中去實現


    private void RoleAssignment(SPListItem item, SPPrincipal groupOrUser, SPRoleDefinition role)
            {
            
    if (!item.HasUniqueRoleAssignments)
            {
                item.BreakRoleInheritance(
    true);//true則斷開并繼承原有權限,false則斷開不繼承原有權限
            }
            
                
                
    this.DisableEventFiring();

                item.Web.AllowUnsafeUpdates 
    = true;

                SPRoleAssignment assignment 
    = new SPRoleAssignment(groupOrUser);
                assignment.RoleDefinitionBindings.Add(role);
                item.RoleAssignments.Add(assignment);

                item.Update();

                
    this.EnableEventFiring();
            }

     


    //角色基類:實際上基類提供了查看的權限,因此在查看中不需要擴展
    public abstract class BasePermissionRole
        {
            
    private string roleName;
            
    public virtual string RoleName
            {
                
    get
                {
                    
    return roleName;
                }
                
    set
                {
                    roleName 
    = value;
                }
            }

            
    private string roleDescription;
            
    public virtual string RoleDescription
            {
                
    get
                {
                    
    return roleDescription;
                }
                
    set
                {
                    roleDescription 
    = value;
                }
            }

            
    public abstract SPBasePermissions ComposePermission();

            
    protected virtual SPBasePermissions ComposeViewPermission()
            {
            
    //對應Sharepoint下的34個基本權限
                return SPBasePermissions.ViewListItems | SPBasePermissions.ViewVersions |
                       SPBasePermissions.ViewFormPages 
    | SPBasePermissions.ViewPages |
                       SPBasePermissions.OpenItems 
    | SPBasePermissions.CreateAlerts |
                       SPBasePermissions.BrowseUserInfo 
    | SPBasePermissions.UseRemoteAPIs |
                       SPBasePermissions.UseClientIntegration 
    | SPBasePermissions.Open;
            }

            
    public abstract BaseRoleRegister CreateRegister();//通過依賴倒置以及單件實現角色注冊
        }
    //新建角色,override基類的ComposePermission()方法,并在View的基礎上擴展
    public class AddPermissionRole : BasePermissionRole
        {
            
    public AddPermissionRole()
            {
                
    this.RoleName = "新建"
                
    this.RoleDescription = "向列表中添加項目,向文檔庫中添加文檔,以及添加 Web 討論評論";
            }

            
    public override string RoleName
            {
                
    get
                {
                    
    return base.RoleName;
                }
                
    set
                {
                    
    base.RoleName = value;
                }
            }

            
    public override SPBasePermissions ComposePermission()
            {
                
    return base.ComposeViewPermission() | SPBasePermissions.AddListItems;
            }

            
    public override BaseRoleRegister CreateRegister()
            {
                
    return new AddRoleRegister(this);
            }
        }

    //注冊基類:
    public class BaseRoleRegister
        {
            
    public BaseRoleRegister(BasePermissionRole role)
            {
                
    this.Permission = role;
            }

            
    protected BasePermissionRole Permission;

            
    public virtual SPRoleDefinition ExecuteRegister(SPWeb web)
            {
                
    foreach (SPRoleDefinition rd in web.RoleDefinitions)
                {
                    
    if (rd.Name == this.Permission.RoleName)
                        
    return rd;
                }

                SPRoleDefinition definition 
    = new SPRoleDefinition();
                definition.Name 
    = this.Permission.RoleName;
                definition.BasePermissions 
    = this.Permission.ComposePermission();
                definition.Description 
    = this.Permission.RoleDescription;

                web.RoleDefinitions.BreakInheritance(
    truetrue);
                web.RoleDefinitions.Add(definition);
                web.Update();

                
    return web.RoleDefinitions[this.Permission.RoleName];
            }
        }

    //新建角色的注冊類:
    public class ApproveRoleRegister : BaseRoleRegister
        {
            
    public ApproveRoleRegister(BasePermissionRole role)
                : 
    base(role)
            { }

        }
    posted on 2009-05-13 06:59 蜘蛛 閱讀(1095) 評論(0)  編輯  收藏 所屬分類: 日常瑣事
    主站蜘蛛池模板: 国产男女猛烈无遮挡免费网站| 5g影院5g天天爽永久免费影院| 在线精品免费视频| 亚洲视频在线观看网址| 最近免费中文字幕大全免费| 亚洲av午夜福利精品一区人妖| 最近更新免费中文字幕大全| 亚洲人成伊人成综合网久久久| 韩国免费a级作爱片无码| 国产亚洲午夜高清国产拍精品| 中文字幕在线成人免费看| 亚洲成A人片777777| 毛片无码免费无码播放| 亚洲高清中文字幕综合网| 91在线视频免费播放| 中国亚洲呦女专区| 亚洲av麻豆aⅴ无码电影| 中文字幕无线码中文字幕免费| 亚洲精品~无码抽插| 亚洲黄色免费观看| 亚洲精品美女久久久久久久| 免费真实播放国产乱子伦| 两个人看的www免费高清| 久久久无码精品亚洲日韩按摩| 成人免费视频网站www| 亚洲av永久无码精品网址| 毛茸茸bbw亚洲人| 131美女爱做免费毛片| 豆国产96在线|亚洲| 亚洲乱码无码永久不卡在线| 无遮免费网站在线入口| 色九月亚洲综合网| 亚洲av无码不卡一区二区三区| 日本三级2019在线观看免费| 高潮毛片无遮挡高清免费视频| 日韩亚洲欧洲在线com91tv| 国产精品久久久久免费a∨ | 你懂得的在线观看免费视频| 亚洲高清不卡视频| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲第一男人天堂|