1

ご存知のように、これを行うことでユーザーの許可を確認できます。

            using (SPWeb web = site.OpenWeb(path))
            {
                SPUser user = SPContext.Current.Web.CurrentUser;
                string loginName = user.LoginName;
                if (web.DoesUserHavePermissions(SPBasePermissions.EnumeratePermissions))
                {
                    if (web.DoesUserHavePermissions(user.LoginName, SPBasePermissions.Open))
                    {
                        //do something
                    }
                }
            }

これが私の質問です。現在のユーザーが列挙型のアクセス許可を持っていない場合、SharePointオブジェクトのアクセス許可を取得するにはどうすればよいですか?前もって感謝します。

4

2 に答える 2

2

これを行うには、「admin」Webインスタンスを開きます(オブジェクトを作成し、SPSiteシステムアカウントのユーザートークンをオブジェクトに渡します)。このようにして、現在のユーザーが十分な権限を持っているかどうかを心配する必要はありません。

SPUserToken adminToken = SPContext.Current.Web.AllUsers["SHAREPOINT\\System"].UserToken;
using (SPSite adminSite= new SPSite(SPContext.Current.Site.ID, adminToken) ) {
   using (SPWeb adminWeb = adminSite.OpenWeb(SPContext.Current.Web.ID)){
      if (adminWeb.DoesUserHavePermissions(SPContext.Current.Web.CurrentUser.LoginName, SPBasePermissions.Open)) {
            //do something 
      }
   }
}

もちろん、SPSite / SPWebオブジェクトの作成と破棄には比較的コストがかかるため、ページの読み込みごとにこれを行うのはお勧めしません。

于 2012-09-03T11:34:27.190 に答える
0

ここでは、SharePointリストオブジェクト、ロールタイプ、およびユーザーを受け取る関数を定義しました。

  • ポータル:SharePointリストまたはドキュメントライブラリオブジェクト。
  • role:Read、DesignなどのSharePointによって提供されるRoleType。
  • ユーザー:ポータルでロールを付与するユーザー。

それがあなたを助けることを願っています。

public static void AssignPermissionToPortal(string portal, SPRoleType role, SPUser user)
        {
            try
            {
                // Run with elevated privileges  
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (SPSite site = new SPSite(SPContext.Current.Web.Site.ID))
                    {
                        using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
                        {
                            web.AllowUnsafeUpdates = true;

                            SPList portalList = SPListHelper.GetSPList(portal, web);
                            portalList.BreakRoleInheritance(false);

                            //Add Readers on portal
                            SPRoleDefinition permission = web.RoleDefinitions["Read"];

                            if (role == SPRoleType.Administrator)
                                permission = web.RoleDefinitions["Full control"];
                            else if (role == SPRoleType.Contributor)
                                permission = web.RoleDefinitions["Contribute"];
                            else if (role == SPRoleType.WebDesigner)
                                permission = web.RoleDefinitions["Design"];
                            else
                                permission = web.RoleDefinitions["Read"];

                            // Check the user Role on site level.
                            SPUser roleUser = uHelper.GetUserById(user.ID);

                            if (roleUser != null)
                            {
                                SPRoleAssignment assignment = new SPRoleAssignment(roleUser);
                                assignment.RoleDefinitionBindings.Add(permission);

                                portalList.RoleAssignments.Add(assignment);
                                portalList.Update();
                            }

                            web.AllowUnsafeUpdates = false;
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                Log.WriteException(ex);
            }
}
于 2012-09-04T12:42:13.290 に答える