首页 > 解决方案 > 休息服务器应如何管理用户启用?

问题描述

我有一个使用 javaee 7 和一个 react/redux 应用程序的 rest java 后端。n 个不同的客户使用相同的应用程序。每个客户可以要求 m 个与其他客户的角色不同的角色。例如,一位客户可以付费查看列表中不应该对另一位客户可见的列。问题是.. 是否有一种模式或方法可以轻松地处理隐藏或显示列表中的列或隐藏/显示表单中的字段的可能性?(用户授权)

客户 X 付费查看客户列表中的电话号码

客户 Y 根本看不到电话号码。

为两者发布的应用程序是相同的。

服务器如何在不耦合的情况下将这些信息提供给前端应用程序?

谢谢。

后来又增加了一个问题:

是的,反应部分很清楚。我将添加一些信息以更清楚。重点是“如果我想从创建表单中隐藏电话号码字段?” 服务器应该如何将这些信息提供给前端?它应该发送一个空的数据对象吗?

标签: javareactjsdesign-patterns

解决方案


这是一个简化的示例,但它应该让您了解如何根据用户角色有条件地获取和呈现数据。

  1. 前端使用身份验证数据调用 API 端点(userIdtoken此示例中)
  2. 后端根据身份验证数据确定角色,返回与该角色相关的数据(例如phone,如果他们的角色允许,则包括)
  3. 前端呈现响应数据(例如"Hidden",如果phone不存在则呈现)

以下是您的React组件的外观:

class CustomerList extends Component {
    constructor(props) {
        super(props);
        this.state = {
            customers: []
        };
    }
    componentDidMount() {
        // fetch list data
        fetch('https://myapi.com/api/getCustomers', {userId: 12345, token: someToken})
            .then(res => res.json())
            .then(response => {
                this.setState({customers: response.customers});
            });
    }
    render() {
        const { customers } = this.state;
        return (
            <div className="customers">
                {customers.length && 
                    <ul>
                        {customers.map(customer => (
                            <li>
                                <div className="name">
                                    Name: {customer.name}
                                </div>
                                <div className="phone">
                                    Phone: {customer.phone || "Hidden"}
                                </div>
                            </li>
                        ))}
                    </ul>
                }
                {!customers.length && 
                    <div>Loading...</div>
                }
            </div>
        );
    }
}

角色只是一个建议。后端还有其他方法可以确定当前用户有权查看哪些数据。关键是你返回到前端的数据应该只包含用户有权查看的内容。您不应该返回所有数据,然后有条件地将其呈现在前端。


推荐阅读