<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)  編輯  收藏 所屬分類: 日常瑣事
    主站蜘蛛池模板: 四虎影视精品永久免费| 国产成人啪精品视频免费网| 亚洲第一AAAAA片| 中文字幕免费观看视频| 亚洲日韩中文无码久久| 丝袜足液精子免费视频| 亚洲一区二区女搞男| a国产成人免费视频| 亚洲第一AAAAA片| 黄+色+性+人免费| 亚洲精品国产suv一区88| 热久久精品免费视频| 黄色一级视频免费观看| 久久亚洲精品无码观看不卡| 免费国产污网站在线观看| 亚洲五月激情综合图片区| 中文字幕一精品亚洲无线一区| 精品国产免费人成网站| 亚洲∧v久久久无码精品| 91免费播放人人爽人人快乐| 亚洲国产区男人本色| 亚洲人午夜射精精品日韩| 国产一级片免费看| 久久精品国产亚洲αv忘忧草| 日韩成人免费aa在线看| 中文字幕版免费电影网站| 久久亚洲熟女cc98cm| 四虎www成人影院免费观看| 亚洲男人电影天堂| 精品久久洲久久久久护士免费| 免费的黄色的网站| 亚洲伦另类中文字幕| 手机看片久久国产免费| 久久国产美女免费观看精品| 亚洲的天堂av无码| 免费jjzz在在线播放国产| 亚欧日韩毛片在线看免费网站| 亚洲日本VA午夜在线影院| 亚洲成AV人片在线观看无| 日韩成全视频观看免费观看高清| 99免费精品视频|