首页 \ 问答 \ CRM 2013 - 从非系统管理员或自定义程序的任何人隐藏设置菜单(CRM 2013 - Hide settings menu from anyone that is not a system admin or customizer)

CRM 2013 - 从非系统管理员或自定义程序的任何人隐藏设置菜单(CRM 2013 - Hide settings menu from anyone that is not a system admin or customizer)

我有兴趣隐藏CRM 2013的功能区中的"Settings"选项(内部部署)我正在使用Visual Ribbon编辑器并一直使用它来隐藏(禁用)我的组织中不会使用的其他项目。

有没有办法隐藏任何非系统管理员或定制工具的"settings" ? 到目前为止,我发现的唯一解决方案是创建自定义站点地图。 这是允许管理员/定制程序访问设置并阻止常规用户查看设置的唯一方法吗?


I'm interested in hiding the "Settings" option from the ribbon in CRM 2013 (on-premise) I'm using the Visual Ribbon editor and have been using it to hide(disable) other items that will not be used in my organization.

Is there a way to hide "settings" from anyone that is not a system admin or customizer? So far the only solutions I've found are to create custom site maps. Is that the only way to allow admins/customizers to access settings and prevent regular users from seeing it?


原文:https://stackoverflow.com/questions/36843038
更新时间:2022-08-28 17:08

最满意答案

log4j的xml format应遵循此模式

<!ELEMENT log4j:configuration (renderer*, appender*,(category|logger)*,root?, categoryFactory?)>   

应该declared before记录器declared before所有appender

所以你log4j.xml应该如下所示

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false" xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="abcLog4j" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/myapp/app/myserver/myproj/domains/logs/abcLog.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5000KB"/>
    <param name="MaxBackupIndex" value="5"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    </layout>
  </appender>

  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">    
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    </layout>   
 </appender>

<appender name="xyzLog4j" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/myapp/app/myserver/myproj/domains/logs/xyzLog.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5000KB"/>
    <param name="MaxBackupIndex" value="5"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    </layout>
  </appender>

<logger name="com.mywhole.mysub.xyz" additivity="false">
     <level value="INFO"/>
     <appender-ref ref="xyzLog4j"/>
</logger>

<logger name="com.mywhole.mysub.abc" additivity="false">
     <level value="INFO"/>
     <appender-ref ref="abcLog4j"/>
</logger>


.......................

<root>
    <priority value="ERROR"/>
    <appender-ref ref="sysoutLog4j"/>       
</root>

有关详细信息,请查看此链接


The xml format of log4j should follow this pattern

<!ELEMENT log4j:configuration (renderer*, appender*,(category|logger)*,root?, categoryFactory?)>   

All the appenders should be declared before loggers

So you log4j.xml should look like the following

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="false" xmlns:log4j='http://jakarta.apache.org/log4j/'>

<appender name="abcLog4j" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/myapp/app/myserver/myproj/domains/logs/abcLog.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5000KB"/>
    <param name="MaxBackupIndex" value="5"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    </layout>
  </appender>

  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">    
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    </layout>   
 </appender>

<appender name="xyzLog4j" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="/myapp/app/myserver/myproj/domains/logs/xyzLog.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="5000KB"/>
    <param name="MaxBackupIndex" value="5"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
    </layout>
  </appender>

<logger name="com.mywhole.mysub.xyz" additivity="false">
     <level value="INFO"/>
     <appender-ref ref="xyzLog4j"/>
</logger>

<logger name="com.mywhole.mysub.abc" additivity="false">
     <level value="INFO"/>
     <appender-ref ref="abcLog4j"/>
</logger>


.......................

<root>
    <priority value="ERROR"/>
    <appender-ref ref="sysoutLog4j"/>       
</root>

Check this link for more details here

相关问答

更多
  • (免责声明:我是致力于链锯V2的开发商之一) 链锯V2可以通过对自定义表达式的支持以及使用这些表达式进行着色,搜索和过滤事件的功能来提供您要查找的一些功能。 您可以将多个日志文件加载到链锯中(默认情况下,日志文件的所有事件都放在特定于日志文件的选项卡上)。 您还可以定义一个“自定义表达式日志面板”,将会将所有选项卡中的事件聚合到与您提供的表达式匹配的新选项卡中 - 与数据库“视图”类似,您可以使用表达式“LEVEL> = WARN”来收集所有警告,将任何日志文件的错误和致命消息转换为单个视图。 一些可用于着 ...
  • 从2.2.2开始:没有。 Grails将apache commons Log域注入到artefact类中,而log4j插件将它与log4j Logger结合在一起。 然而,在你的例子中,你传递一个GString作为唯一的参数。 由于它们被惰性转换为Java Strings ,因此log4j记录器会触发它自己的内部调试启用检查并跳过toString()调用。 但是,如果您执行参数构建等昂贵的操作,并且担心浪费的周期,则必须自己调用isDebugEnabled() : if (log.isDebugEnable ...
  • 在第一种情况下 log.info("Something like this {}", variable); 第一个info参数是一个模板字符串。 内部log4j将使用剩下的参数来填充相应顺序的占位符。 在第二种情况下 log.info("Something like this " + variable); StringBuilder将用于组装消息字符串,结果将用作日志消息。 使用第一个变体至少有两个原因: 1)除非要将消息写入appender,否则不会处理该消息。 使用模板字符串延迟只有在实际写入日志( ...
  • 喜欢第一个。 如果由于您的日志级别高于info而没有写入日志,则您需要调用log.info的成本以及临时参数数组的构造。 但是记录器不会构造日志字符串。 在第二种情况下,您有调用加上日志字符串的格式,这可能更耗时。 Prefer the first one. If no log is written because your log level is higher than info then you have the cost of the call to log.info and the constru ...
  • log4j的xml format应遵循此模式 应该declared before记录器declared before所有appender 所以你log4j.xml应该如下所示
  • 有时git提交的日志消息会提到其他提交的SHA [...]。当重新定位时,提交的SHA会发生变化。 有没有办法可以自动修复日志消息以获得新的SHA? 您可以使用git patch-id来查找应用相同更改的提交,这是最强力的方法 git rev-list --no-merges --reflog --all \ | git diff-tree --stdin -p \ | git patch-id | sort > patch-ids awk '{print $2,$1}' patch-ids | uniq ...
  • 尝试不用shell=True : log = subprocess.Popen(mycmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE) Try without shell=True: log = subprocess.Popen(mycmd, stdin ...
  • 以下是我最终想到的结果: log4j.rootLogger=INFO,console,stdLog,errorLog #console appender log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern = %t %-5p ...
  • 这是因为你的电话 CakeLog::write('time', 'start working at: ' . date('m/d/Y', strtotime("now"))); 将尝试写入类型的日志:“time”。 由于没有流配置来处理,因此CakeLog将为您创建一个“默认”流来处理此日志调用。 问题是,从现在开始,您将配置一个“默认”流,它将捕获所有日志并将它们加倍以用于调试和错误日志。 解决方案是在bootstrap.php文件中正确配置日志,如下所示: CakeLog::config('time_ ...
  • .dockerignore规则遵循文件filepath/#Match .dockerignore 。 尝试(测试) Gemfile.lock而不是/Gemfile.lock 。 并检查eol(行尾)字符是unix样式,而不是.dockerignore文件中的Windows样式。 显然,使用以/ like /xxx (或/.* )开头的规则的(docker 1.10,2016年3月) 不受支持 。 The .dockerignore rules follow the filepath/#Match. Try ...

相关文章

更多

最新问答

更多
  • 您如何使用git diff文件,并将其应用于同一存储库的副本的本地分支?(How do you take a git diff file, and apply it to a local branch that is a copy of the same repository?)
  • 将长浮点值剪切为2个小数点并复制到字符数组(Cut Long Float Value to 2 decimal points and copy to Character Array)
  • OctoberCMS侧边栏不呈现(OctoberCMS Sidebar not rendering)
  • 页面加载后对象是否有资格进行垃圾回收?(Are objects eligible for garbage collection after the page loads?)
  • codeigniter中的语言不能按预期工作(language in codeigniter doesn' t work as expected)
  • 在计算机拍照在哪里进入
  • 使用cin.get()从c ++中的输入流中丢弃不需要的字符(Using cin.get() to discard unwanted characters from the input stream in c++)
  • No for循环将在for循环中运行。(No for loop will run inside for loop. Testing for primes)
  • 单页应用程序:页面重新加载(Single Page Application: page reload)
  • 在循环中选择具有相似模式的列名称(Selecting Column Name With Similar Pattern in a Loop)
  • System.StackOverflow错误(System.StackOverflow error)
  • KnockoutJS未在嵌套模板上应用beforeRemove和afterAdd(KnockoutJS not applying beforeRemove and afterAdd on nested templates)
  • 散列包括方法和/或嵌套属性(Hash include methods and/or nested attributes)
  • android - 如何避免使用Samsung RFS文件系统延迟/冻结?(android - how to avoid lag/freezes with Samsung RFS filesystem?)
  • TensorFlow:基于索引列表创建新张量(TensorFlow: Create a new tensor based on list of indices)
  • 企业安全培训的各项内容
  • 错误:RPC失败;(error: RPC failed; curl transfer closed with outstanding read data remaining)
  • C#类名中允许哪些字符?(What characters are allowed in C# class name?)
  • NumPy:将int64值存储在np.array中并使用dtype float64并将其转换回整数是否安全?(NumPy: Is it safe to store an int64 value in an np.array with dtype float64 and later convert it back to integer?)
  • 注销后如何隐藏导航portlet?(How to hide navigation portlet after logout?)
  • 将多个行和可变行移动到列(moving multiple and variable rows to columns)
  • 提交表单时忽略基础href,而不使用Javascript(ignore base href when submitting form, without using Javascript)
  • 对setOnInfoWindowClickListener的意图(Intent on setOnInfoWindowClickListener)
  • Angular $资源不会改变方法(Angular $resource doesn't change method)
  • 在Angular 5中不是一个函数(is not a function in Angular 5)
  • 如何配置Composite C1以将.m和桌面作为同一站点提供服务(How to configure Composite C1 to serve .m and desktop as the same site)
  • 不适用:悬停在悬停时:在元素之前[复制](Don't apply :hover when hovering on :before element [duplicate])
  • 常见的python rpc和cli接口(Common python rpc and cli interface)
  • Mysql DB单个字段匹配多个其他字段(Mysql DB single field matching to multiple other fields)
  • 产品页面上的Magento Up出售对齐问题(Magento Up sell alignment issue on the products page)