Odoo14自定义模块导出权限

1.js

odoo.define('fsn_base/js/data_export.js', function (require) {
    "use strict";

    var ListController = require('web.ListController');
    var session = require('web.session');
    var rpc = require("web.rpc");

    ListController.include({

        check_the_permissions: async function () {

            // 判断是否是超级用户
            if (session.is_admin) {
                return true
            } else {

                var is_show = rpc.query({  // POST
                    route: "/fsn_base/check_the_permissions",
                    params: {
                        "model": this.modelName,
                        "user_id": session.uid,
                    }
                }).then((res) => {
                    return res.is_show
                })

                return is_show
            }

        },

        willStart: function() {


            const sup = this._super(...arguments);

            const exp = this.check_the_permissions().then(isExportEnable => {

                this.isExportEnable = isExportEnable;
            })

            return Promise.all([sup, exp]);


        }
    });

});

2.controllers

from odoo import http


class DataExportSetting(http.Controller):

    @http.route('/fsn_base/check_the_permissions/', methods=['POST', 'GET'], type='json', auth="user")
    def check_the_permissions(self, **kw):

        model_name = kw.get("model")
        user_id = kw.get("user_id")
        is_show = False

        ir_model_obj = http.request.env["ir.model"].sudo().search([("model", "=", model_name)])

        data_export_setting_obj = http.request.env["data_export_setting"].sudo().search([("model_id", "=", ir_model_obj.id)])

        if data_export_setting_obj and user_id in data_export_setting_obj.users.ids:
            is_show = True

        return {"is_show": is_show}

3.models

from odoo import api, fields, models
from odoo.exceptions import ValidationError

class DataExportSetting(models.Model):
    _name = 'data_export_setting'
    _description = 'FSN数据导出权限设置'
    _rec_name = 'name'
    _order = "create_date desc"


    def set_res_group_id(self):
        return self.env.ref('base.group_allow_export').id

    name = fields.Char(string="名称", required=True)
    model_id = fields.Many2one('ir.model', string='模型', required=True, ondelete='cascade')
    users = fields.Many2many('res.users', string="员工")

    res_group_id = fields.Many2one("res.groups", string="组别", compute="set_res_group_id_users", store=True, default=set_res_group_id)



    # 检查数据唯一性
    @api.constrains('model_id')
    def _check_unique(self):

        demo = self.env[self._name].sudo().search([
            ('model_id', '=', self.model_id.id)
        ])

        if len(demo) > 1:
            raise ValidationError("已经存在该模型的导出权限设置记录了!")




    @api.depends('users')
    def set_res_group_id_users(self):
        for record in self:

            for user in record.users:

                record.res_group_id.users = [(4, user.id)]

 

posted @ 2022-08-06 16:39  手可摘星辰。  阅读(183)  评论(0编辑  收藏  举报