コード例 #1
0
        private List <PermissionKind> GetPermissionKinds(BasePermissions basePermissions)
        {
            var retVal = new List <PermissionKind>();

            foreach (var permissionKind in (PermissionKind[])Enum.GetValues(typeof(PermissionKind)))
            {
                if (basePermissions.Has(permissionKind))
                {
                    retVal.Add(permissionKind);
                }
            }
            return(retVal);
        }
コード例 #2
0
ファイル: SPPermissionInfo.cs プロジェクト: rlocus/SP-MVC
        internal SPPermissionInfo(BasePermissions permissions)
        {
            if (permissions == null)
            {
                throw new ArgumentNullException(nameof(permissions));
            }
            this.High = 0u;
            this.Low  = 0u;

            foreach (var perm in (PermissionKind[])Enum.GetValues(typeof(PermissionKind)))
            {
                if (permissions.Has(perm))
                {
                    if (perm == PermissionKind.FullMask)
                    {
                        this.Low  = 65535u;
                        this.High = 32767u;
                        continue;
                    }
                    if (perm == PermissionKind.EmptyMask)
                    {
                        this.Low  = 0u;
                        this.High = 0u;
                        continue;
                    }
                    int  low  = perm - PermissionKind.ViewListItems;
                    uint high = 1u;
                    if (low >= 0 && low < 32)
                    {
                        high    <<= low;
                        this.Low |= high;
                        continue;
                    }
                    if (low >= 32 && low < 64)
                    {
                        high     <<= low - 32;
                        this.High |= high;
                    }
                }
            }
        }
コード例 #3
0
        /// <summary>
        /// Returns role assignments for the current sharepoint objects
        /// </summary>
        /// <param name="context"></param>
        /// <param name="CurrentWeb"></param>
        /// <param name="Object"></param>
        /// <param name="childSecurableObject"></param>
        private static void GetRoleAssignments(ClientContext context, Web CurrentWeb, object Object, SPSecurableObject childSecurableObject)
        {
            try
            {
                string objectDetails = string.Empty;
                childSecurableObject.RoleAssignments = new List <SPRoleAssignment>();
                RoleAssignmentCollection roleAssignments = null;

                Type spObjectType = Object.GetType();

                switch (spObjectType.Name)
                {
                case "Web":
                    Web web = Object as Web;
                    objectDetails   = web.ServerRelativeUrl;
                    roleAssignments = web.RoleAssignments;
                    break;

                case "List":
                    List list = Object as List;
                    objectDetails   = "List " + list.Title;
                    roleAssignments = list.RoleAssignments;
                    break;

                case "ListItem":
                    ListItem listItem = Object as ListItem;
                    objectDetails   = "List Item ID " + listItem.Id;
                    roleAssignments = listItem.RoleAssignments;
                    break;
                }

                context.Load(roleAssignments);
                context.ExecuteQuery();

                foreach (RoleAssignment roleAssignment in roleAssignments)
                {
                    SPRoleAssignment spRoleAssignment = new SPRoleAssignment();
                    spRoleAssignment.Member          = new SPMember();
                    spRoleAssignment.RoleDefBindings = new SPRoleDefBindings();

                    context.Load(roleAssignment);
                    context.Load(roleAssignment.Member);
                    context.ExecuteQuery();

                    Principal roleMember = roleAssignment.Member;

                    if (roleMember.PrincipalType == Microsoft.SharePoint.Client.Utilities.PrincipalType.SharePointGroup)
                    {
                        spRoleAssignment.PrincipalType = PrincipalType.Group;
                        spRoleAssignment.Member.Group  = new SPGroup();

                        var     query = from g in spSiteGroups.SiteGroups where g.GroupName == roleMember.LoginName select g;
                        SPGroup group = query.First();

                        spRoleAssignment.Member.Group.GroupName = group.GroupName;
                        spRoleAssignment.Member.Group.Users     = new List <SPUser>();

                        foreach (SPUser usr in group.Users)
                        {
                            SPUser spUser = new SPUser
                            {
                                DisplayName = usr.DisplayName,
                                Email       = usr.Email,
                                LoginId     = usr.LoginId
                            };

                            spRoleAssignment.Member.Group.Users.Add(spUser);
                        }
                    }
                    else if (roleMember.PrincipalType == Microsoft.SharePoint.Client.Utilities.PrincipalType.User)
                    {
                        spRoleAssignment.PrincipalType = PrincipalType.User;
                        spRoleAssignment.Member.User   = new SPUser
                        {
                            DisplayName = roleMember.Title,
                            LoginId     = roleMember.LoginName
                        };
                    }

                    context.Load(roleAssignment, r => r.RoleDefinitionBindings);
                    context.ExecuteQuery();

                    spRoleAssignment.RoleDefBindings.Permissions = new List <SPBasePermissions>();

                    foreach (RoleDefinition roleDef in roleAssignment.RoleDefinitionBindings)
                    {
                        if (string.IsNullOrEmpty(spRoleAssignment.RoleDefBindings.RoleName))
                        {
                            spRoleAssignment.RoleDefBindings.RoleName = roleDef.Name;
                        }
                        else
                        {
                            spRoleAssignment.RoleDefBindings.RoleName = spRoleAssignment.RoleDefBindings.RoleName + ", " + roleDef.Name;
                        }

                        //enumerate the enum and check each permission
                        //type to see if the perm is included
                        string[] keys = Enum.GetNames(typeof(PermissionKind));

                        context.Load(roleDef, r => r.BasePermissions);
                        context.ExecuteQuery();

                        //get a reference to the base permissions
                        //in this RoleDefinition
                        BasePermissions bp = roleDef.BasePermissions;

                        //enumerate the enum
                        foreach (string key in keys)
                        {
                            if (bp.Has((PermissionKind)Enum.Parse(typeof(PermissionKind), key)))
                            {
                                SPBasePermissions spBasePermission = new SPBasePermissions {
                                    PermissionName = key
                                };
                                spRoleAssignment.RoleDefBindings.Permissions.Add(spBasePermission);
                            }
                        }
                    }

                    childSecurableObject.RoleAssignments.Add(spRoleAssignment);
                }
            }
            catch (Exception ex)
            {
                RaiseStatusUpdate("ERROR: " + CurrentWeb.ServerRelativeUrl + ". Stack Trace: " + ex.Message, UpdateType.StatusUpdateOnly);
            }
        }