使用SQL查询检查Sitecore访问

时间:2016-06-03 06:21:50

标签: sitecore

我正在尝试编写一个SQL查询来检查"写"在Sitecore中访问用户。

例如,假设我想检查John的访问权限,我们目前在Sitecore中使用其Mulitsite Manager有40个网站。除了从用户管理器执行此操作外,我还希望在SQL的帮助下完成此操作。

您知道我可以用来检查访问权限的数据库吗?

除此之外,我在代码中也遇到了一点错误。但我想,一旦我输入正确的数据库名称,它就会被修复。

提前谢谢你, Vaibhav的

1 个答案:

答案 0 :(得分:0)

使用SQL查询检查用户访问权限是一种非常糟糕的做法。

要检查您需要在Sitecore类之上使用的用户权限:

 namespace Sitecore.Security.AccessControl
 {
   public class ItemAccess
   {
    public ItemAccess(Item item);

    public virtual bool CanAdd(BranchId branchId);
    public virtual bool CanAdd(TemplateID templateID);
    public virtual bool CanAdmin();
    public virtual bool CanCopyTo(Item destination);
    public virtual bool CanCreate();
    public virtual bool CanDelete();
    public virtual bool CanDuplicate();
    public virtual bool CanMoveTo(Item destination);
    public virtual bool CanRead();
    public virtual bool CanReadLanguage();
    public virtual bool CanRemoveVersion();
    public virtual bool CanRename();
    public virtual bool CanWrite();
    public virtual bool CanWriteLanguage();
}

}

要检查用户是否有编写过程,请使用下一个代码:

 public bool CheckWriteAccess(string itemId, string UserName)
    {
        bool WriteAccess = false;

        if (Sitecore.Data.ID.IsID(itemId))
        {
            Item item = Sitecore.Context.Database.GetItem(Sitecore.Data.ID.Parse(itemId));
            if (item != null)
            {
                Sitecore.Security.Domains.Domain domain = Sitecore.Context.Domain;
                string domainUser = domain.Name + @"\" + UserName;
                if (Sitecore.Security.Accounts.User.Exists(domainUser))
                {
                    Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(domainUser, false);
                    // UserSwitcher allows below code to run under a specific user 
                    using (new Sitecore.Security.Accounts.UserSwitcher(user))
                    {
                        WriteAccess = item.Access.CanWrite();
                    }
                }
            }
        }
        return WriteAccess;
    }