के आधार पर कुछ प्रतिक्रिया घटक बच्चों को छुपाएं मैं प्रतिक्रिया और रेडक्स (एक नोड.जेएस बैकएंड के साथ) में एक एकल पृष्ठ एप्लिकेशन लिख रहा हूं।उपयोगकर्ता भूमिका
मैं भूमिका-आधारित पहुंच नियंत्रण को कार्यान्वित करना चाहता हूं और ऐप के कुछ हिस्सों (या उप-भागों) के प्रदर्शन को नियंत्रित करना चाहता हूं।
मैं Node.js, जो सिर्फ इस तरह के संरचना के साथ एक वस्तु है से अनुमति सूची प्राप्त करने के लिए जा रहा हूँ:
{
users: 'read',
models: 'write',
...
dictionaries: 'none',
}
कुंजी सुरक्षित है संसाधन,
मूल्य उपयोगकर्ता की अनुमति है इस संसाधन के लिए (none
, read
, write
) में से एक।
मैं इसे रेडक्स राज्य में संग्रहीत कर रहा हूं। काफी आसान लगता है।
none
अनुमति react-router
मार्ग onEnter/onChange
हुक या redux-auth-wrapper
द्वारा चेक की जाएगी। यह भी आसान लगता है।
लेकिन किसी भी घटक दृश्य के लिए read/write
अनुमतियों को लागू करने का सबसे अच्छा तरीका क्या है (उदाहरण के लिए यदि मॉडल { models: 'read' }
अनुमति है तो मॉडल मॉडल में संपादन बटन छुपाएं)।
मैं this solution पाया है और यह मेरे काम के लिए थोड़ा बदलने के लिए:
class Check extends React.Component {
static propTypes = {
resource: React.PropTypes.string.isRequired,
permission: React.PropTypes.oneOf(['read', 'write']),
userPermissions: React.PropTypes.object,
};
// Checks that user permission for resource is the same or greater than required
allowed() {
const permissions = ['read', 'write'];
const { permission, userPermissions } = this.props;
const userPermission = userPermissions[resource] || 'none';
return permissions.indexOf(userPermission) >= permissions.indexOf(permission)
}
render() {
if (this.allowed()) return { this.props.children };
}
}
export default connect(userPermissionsSelector)(Check)
जहां userPermissionsSelector
कुछ इस तरह होगा: (store) => store.userPermisisons
और उपयोगकर्ता की अनुमति वस्तु देता है।
फिर Check
साथ संरक्षित तत्व लपेट:
<Check resource="models" permission="write">
<Button>Edit model</Button>
</Check>
इसलिए यदि उपयोगकर्ता models
के लिए write
अनुमति बटन प्रदर्शित नहीं किया जाएगा नहीं है।
क्या किसी ने ऐसा कुछ किया है? क्या इससे कहीं अधिक "सुरुचिपूर्ण" समाधान है?
धन्यवाद!
पीएस बेशक सर्वर की अनुमति भी सर्वर की ओर से जांच की जाएगी।
मैंने पहले ऐसा कुछ किया है। मेरे पास एक व्यवस्थापक पृष्ठ था जो उपयोगकर्ता के आधार पर प्रतिबंधित था। आप जो कर रहे हैं वह मूल रूप से मैंने किया है। मैंने PHP को अपने बैकएंड के रूप में उपयोग किया और PHP सत्र की जांच करके इसे मान्य किया (सर्वश्रेष्ठ नहीं बल्कि मेरे पास जो जानता था उसके साथ काम किया)। और यह पृष्ठ को सफलतापूर्वक छुपाया। यदि आपका समाधान काम कर रहा है, तो मैं इसके बारे में बहुत ज्यादा परेशान नहीं होगा, हालांकि आप किसी अन्य चीज़ को वापस लौटने के लिए प्रस्तुत कर सकते हैं जैसे कि 'इस पृष्ठ तक पहुंच नहीं है' या कुछ, बस इतना उपयोगकर्ता पृष्ठ को तोड़ने के बजाए कुछ देख सकता है, –
धन्यवाद, लेकिन इस मामले में 'else' कथन की आवश्यकता नहीं है, क्योंकि मैं पहले से खोले गए पृष्ठ में' एडिट 'या' डिलीट 'बटन जैसे कुछ एक्शन कंट्रोल को छिपाना चाहता हूं। –
यह ठीक है, अगर आप '{exist &&