【问题标题】:Joomla ACl problemsJoomla ACl 问题
【发布时间】:2013-09-26 01:19:31
【问题描述】:

我为 Joomla 2.5 编写了一个组件。它工作得很好。但是我遇到了访问控制问题。该组件管理文档。它允许客户上传它们、标记它们、搜索等。所有这些都很好。用户需要登录系统才能查看、编辑和删除文档。

不幸的是,虽然系统限制了编辑和删除,但它似乎并没有限制查看。它不会将视图限制为仅登录用户。如果您直接在浏览器栏中键入文档的组件 url,它会加载视图:

http://www.mydomain.com/component/document_managment/1.html?view=document

我四处搜寻,找不到任何有用的东西。关于我可能做错了什么有什么想法吗?

【问题讨论】:

    标签: joomla components acl


    【解决方案1】:

    我假设您已经实现了完整的 ACL,即documents 表中有一个资产列,并且您有一个定义了一些 ACL 规则的 access.xml,即

    <section name="component">
      <action name="core.admin" title="JACTION_ADMIN" description="JACTION_ADMIN_COMPONENT_DESC" />
    ...
    
    1. 您想在access.xml(通常在您的管理员组件根目录中)中添加core.viewcore.view.own ACL 规则。

      <action name="core.view" title="View all documents"
      <action name="core.view.own" title="View own documents"
      
    2. 在组件配置中,给用户分配权限,让超级用户可以查看所有(管理员有core.view权限),每个注册用户都有core.view.own

    3. 在 view.html 甚至更好的模型中,在加载任何数据之前测试权限:

      $user = JFactory::getUser();
      $id = $app->input->getInt('id') // load the document id
      $canView = false;
      if($id){
          $canView = $user->authorise('core.view', 'com_yourcomponent.document') || 
              $user->authorise('core.view.own', 'com_yourcomponent.document.'.$id);
      }
      

    【讨论】:

    • 嗨@RiccardoZorn 感谢您的帮助。我无法让它正常工作。它现在禁止查看该文档,但它也阻止任何登录查看该文档的人。我在文档表中没有资产列。为什么需要?没有它,编辑等工作。谢谢
    • 如果您没有它,很可能任何具有编辑权限的用户都可以编辑任何文档;而通常您只想允许所有者和超级用户进行编辑; ACL 允许您实现这一点,但您需要每个文档都有一个资产,因此我提到了资产列。
    • 当然,你可以通过检查用户的“一般”权限(core.view & core.edit)和文档的所有者ID来达到同样的效果;但是您需要手动编写代码来实现 Joomla! 的 ACL 已经为您提供的功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2014-06-11
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多