跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. 请教一个对象权限设定

请教一个对象权限设定

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
15 帖子 6 发布者 9.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • mrshellyM 离线
    mrshellyM 离线
    mrshelly
    写于 最后由 编辑
    #5

    我没管你重申不重申...

    <br />...<br />&nbsp; &nbsp; &nbsp; &nbsp; &#039;date_order&#039;:fields.date(&#039;Date Ordered&#039;, required=True, states={&#039;confirmed&#039;:[(&#039;readonly&#039;,True)], &#039;approved&#039;:[(&#039;readonly&#039;,True)]}, select=True, help=&quot;Date on which this document has been created.&quot;),<br /><br />...<br />
    



    注意看 字段的 states 属性....

    1 条回复 最后回复
    0
    • digitalsatoriD 离线
      digitalsatoriD 离线
      digitalsatori 管理员
      写于 最后由 编辑
      #6

      @breterniu 根据对象状态来设置访问规则有两种方法。mrshelly很详尽的跟你解释了如何在对象的字段级别根据状态设置访问规则,另一种就是记录级的访问规则,就是你提到的方法。
      之所以你的方法不成功,是因为你只为该对象设置了读的权限规则,对增,删,改并没有设置权限规则,OpenERP对不设定规则的表示默认具有该权限。对于你的需求,你可以再增加一条记录规则应用于(create, write, delete): [('state','!=','approved')]

      【上海先安科技】(tony AT openerp.cn)

      1 条回复 最后回复
      0
      • B 离线
        B 离线
        breterniu
        写于 最后由 编辑
        #7

        感谢@digitalsatori,@mrshelly详细的说明.
        (1)按mrshelly进行字段级定义可以工作,然而有不合理之处,一是逻辑上是对象级权限,按字段设置太繁琐;二是应为通过配置实现,而不是代码。
        (2)按digitalsatori记录级的方法测试了一下仍不成功,[('state','!=','approved')],从逻辑上也有些问题,A-〉B,并不能推导出!A->!B,您说呢


        1 条回复 最后回复
        0
        • mrshellyM 离线
          mrshellyM 离线
          mrshelly
          写于 最后由 编辑
          #8

          理论上, 这个 states 可以在 view xml 里配置, 这样,就可以通过配置实现了.
          但是.... 这个 states 属性的OE处理, 从  5.0.x 开屎 就BUG不断... 至少6.0.3  还是存在有很多问题. 具体的可以搜索BBS里我关于 attrs 的贴子.

          如果这个BUG解决了. 你就可以从 view xml 中去配置玩这些东西了...(如果你的条件不复杂....)

          1 条回复 最后回复
          0
          • JoshuaJ 离线
            JoshuaJ 离线
            Joshua 管理员
            写于 最后由 编辑
            #9

            我测试了按照[('state','!=','approved')] 应该是可以的,不知道楼主是用什么账号登陆,如果是admin?还是你的状态名字写错了。你试试用非管理员的用户登陆。而且逻辑上也没问题,你要的是在approve下不能修改换句话那就是在draft下或者done的状态可以修改。因为不知道你实际是想怎么用,不过在定义权限的时候,也是按上面digitalsatori说的那样,如果你没给[b]改,增,删[/b]定义一个domain他就默认你可以在任何状态修改。你一开始定义read没效是因为那样定义的的意思只是state为apprved的时候才能在tree view上看到,对[b] 改,增,删[/b]完全没有约束。

            【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

            1 条回复 最后回复
            0
            • B 离线
              B 离线
              breterniu
              写于 最后由 编辑
              #10

              再次感谢!
                用记录规则方式似影响到对象动态权限,然而中间出现很多莫名其妙错误,如图所示,如字符集问题,一些字段仍可更新等等。
                (1)用记录规则定义与状态相关的对象权限仍不是合理的方案,基于工作流状态的ACL方式(通过配置文件)应是解决办法。目前基于字段级定义更可靠些。
                (2)OPENERP应偏实施而不是二次开发。

              [quote author=Joshua link=topic=2753.msg9274#msg9274 date=1328665839]
              我测试了按照[('state','!=','approved')] 应该是可以的,不知道楼主是用什么账号登陆,如果是admin?还是你的状态名字写错了。你试试用非管理员的用户登陆。而且逻辑上也没问题,你要的是在approve下不能修改换句话那就是在draft下或者done的状态可以修改,因为不知道你实际是想怎么用。不过在定义权限的时候,也是按上面digitalsatori说的那样,如果你没给[b]改,增,删[/b]定义一个domain他就默认你可以在任何状态修改。你一开始定义read没效是因为,那样定义的的意思只是state为apprved的时候才能在tree view上看到,对[b] 改,增,删[/b]完全没有约束。
              [/quote]

              1 条回复 最后回复
              0
              • wjfonhandW 离线
                wjfonhandW 离线
                wjfonhand
                写于 最后由 编辑
                #11

                “OPENERP应偏实施而不是二次开发”

                这个说法有什么依据呢?
                我倒是觉得OpenERP的实施过程以二次开发为主配置为辅。

                GoodERP -- Odoo China fork

                1 条回复 最后回复
                0
                • JoshuaJ 离线
                  JoshuaJ 离线
                  Joshua 管理员
                  写于 最后由 编辑
                  #12

                  @breterniu
                  字符集问题。估计不是因为rule的引入所引起的。

                  【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

                  1 条回复 最后回复
                  0
                  • B 离线
                    B 离线
                    breterniu
                    写于 最后由 编辑
                    #13

                    (1)看了openerp其他模块代码,基于工作流状态的权限设定定义在字段上是通行的做法:如
                    readonly=True, states={'draft':[('readonly',False)]},
                    (2)由于对openerp开发还不是很了解,做出“以实施为主”的判断可能有误。这个问题可延伸至如何实现openerp的商业价值?
                        看了一下,Openerp主要还是面向生产制造企业,咨询和实施的价值应大于二次开发,若不是基于业务模型及开发技术透彻的掌握,二次开发是否会破坏原有的业务设计?
                        若是基于openerp平台开发框架,开发新的行业应用是否是openerp的方向?

                       
                    [quote author=Jeff link=topic=2753.msg9282#msg9282 date=1328691473]
                    “OPENERP应偏实施而不是二次开发”

                    这个说法有什么依据呢?
                    我倒是觉得OpenERP的实施过程以二次开发为主配置为辅。
                    [/quote]

                    1 条回复 最后回复
                    0
                    • mrshellyM 离线
                      mrshellyM 离线
                      mrshelly
                      写于 最后由 编辑
                      #14

                      我猜官方旨在推进 openobject 框架....

                      1 条回复 最后回复
                      0
                      • J 离线
                        J 离线
                        jerry79
                        写于 最后由 编辑
                        #15

                        attrs="{'readonly':[('state','!=','draft')]} 这样的设置只能解决字段在流程的某个状态下的通用权限设置,而不能针对该流程状态下的不同用户做设置,比如说proved状态下,某个按钮只能主管看他,其他用户看不到,就必须加上类似attrs="{'invisible': [('user_id', '!=', uid) ] }",即判断当前用户是否与流程设置的用户相符。这样的设置有些过于麻烦,理论上workflow应该允许为每一个流程节点设置权限,不过还没有研究明白。

                        1 条回复 最后回复
                        0

                        • 登录

                        • 没有帐号? 注册

                        • 登录或注册以进行搜索。
                        • 第一个帖子
                          最后一个帖子
                        0
                        • 版块
                        • 标签
                        • 热门
                        • 用户
                        • 群组