【问题标题】:Is it possible to programmatically determine the type of a SharePoint object?是否可以以编程方式确定 SharePoint 对象的类型?
【发布时间】:2010-06-14 14:03:57
【问题描述】:

我正在使用 SharePoint 2007 对象模型 API 将角色分配给 SharePoint 对象,但是当您执行此操作时,您必须事先知道 SharePoint 对象的类型,如下所示:

// apply the new roleassignment to the folder.  You can do this at the listitem level   if desired (i.e. this could be SPfile.Item…. instead of SPFolder.Item)
folder.Item.RoleAssignments.Add(roleAssignment);

(来自http://blogs.msdn.com/b/robgruen/archive/2007/11/15/how-to-programmatically-set-permissions-on-files-folders-in-a-sharepoint-document-library.aspx的代码sn-p)

我想要一个能够传递 SharePoint 对象的方法的实现,确定 SharePoint 对象的类型,如下所示:

public static bool AssignRole(string spWebUrl, object spObject, SPUser oUser, string spRoleDefinition);

示例 SharePoint 对象类型为:SPSite、SPWeb、SPList、SPListItem、SPField、SPFolder

任何有关如何解决确定 SharePoint 对象类型问题的帮助将不胜感激。

旁注:
There is a way to determine the object type(有点),如果您知道该对象在站点中所在位置的完整 url,尽管这真的不是我想走的路线。

【问题讨论】:

    标签: c# sharepoint sharepoint-2007 oop


    【解决方案1】:

    我想你不想重复代码?

    为什么不使用 SPRoleAssignmentCollection 而不是对象?

    AssignRole(string spWebUrl, SPRoleAssignmentCollection spAssignmentCollection, 
               SPUser oUser, string spRoleDefinition); 
    

    你把函数称为

    AssignRole(spWebUrl, spObject.RoleAssignments, oUser, spRoleDefinition); 
    

    而不是你的预期

    AssignRole(spWebUrl, spObject, oUser, spRoleDefinition); 
    

    如果你真的想传递一个对象,你至少有以下选项

    • 使用is关键字
    • 使用 GetType 和 TypeOf 方法来比较类型标识。

    以上两种用法的示例以及它们的区别参见:http://bytes.com/topic/c-sharp/answers/641093-difference-between-gettype-typeof-class

    但我不建议使用这种方法。

    是什么阻止了该方法的用户传入 List ? 现在你需要一个在传入无效对象时抛出的异常(或返回值)。

    另外,如果 sharepoint 添加可以分配角色的新对象会怎样?如果您已经将此代码交付给许多客户,您现在会发布更新吗?

    希望对您有所帮助。祝你好运!

    【讨论】:

    • 我认为这对我的情况没有帮助。我想使用一种方法为任何共享点对象分配权限。我想将 sharepoint 对象作为参数传递,然后在方法中确定 SharePoint 类型,并适当分配权限。我不希望有一种方法来为文件夹分配权限,也没有一种方法来为列表分配权限等。也许我问的是不可能的?
    • @program247365:可以使用 C# 本身。我不确定 Sharepoint 有什么东西。我已编辑我的答案以添加该信息。
    • Moron 的解决方案很好。编写一个可以处理任何类型 SPObject 的方法是没有意义的,因为最终只有从 SPSecurableObject 继承的对象才能存储权限。 SPField 根本无法存储权限,SPSite 是一个特例。 SPSite 管理员通过 SPUser 的属性“IsSiteAdmin”设置,其他所有权限都在 SPSite 的根 SPWeb 上设置。因此,Moron 的解决方案可以处理您在问题中提到的所有其他对象。
    • @Flo 谢谢你的评论,我明白你的意思了。 @Moron,感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多