2016-04-08 8 views
0

TL; DR: İstemci tarafı izinleriyle erişimi kısıtlayın veya uygulamaları ayrı dosyalara bölün ve her dosyaya erişimi kısıtlayın.İstemci tarafı ReactJS izinlerini uygulayın veya uygulamaları birden çok dosyaya bölün.

Çok sayıda küçük istemci tarafı uygulaması oluşturmak için ReactJS (React Router ile birlikte) kullanıyorum. Aradaki işçiler tarafından, aralarında çok fazla değişmeden kullanılacaktır.

Symfony2'yi arka uç olarak kullanıyorum. Sunucu tarafından oluşturulmuş uygulamalar/sayfalar için önceden ayarlanmış izinlerim var. (Uygulamalar Tepki ait)

Şimdiye kadar tüm kullanıcılar aynı izinlere gerekli, bu yüzden ana vermektedir sayfaya sadece kısıtlayan erişimi olan uzak kazanılmış ettik ki, çok dosyası (ve API app.js elbette). Ancak şimdi bu uygulamalardan bazılarını belirli kullanıcılardan gizleyebilmem gerekiyor.

  1. ayrı paketlenmiş dosyalar halinde uygulamalar yukarı Tepki ve sadece uygun sayfa hizmeti Gözat Symfony2'nin sunucu tarafı yaklaşımdır
  2. bölünmüş tamamlayan bir istemci tarafı izinleri sistemi uygulamak: Onu görmek gibi ben iki seçenek var doğru izinleri sahipleri

Seçenek 1 projeye karmaşıklık çok eklersiniz ve öğreticiler yolunda çok var orada değil gibi ben, ben bile başlayacaktı nasıl hiçbir fikrim yok. (Bu arada, kullanıcıların istemci tarafı kodunu denetleyip koruma alanlarına girip girmedikleri önemli değil, çünkü temel veriler API aracılığıyla korunur.) Ancak bu, tek bir kod tabanı ve daha iyi anlamına gelir. önbelleğe alma, React gibi tüm satıcı kodları yalnızca bir kez indirilebileceğinden.

Seçenek 2, bir istemci tarafı izin sistemi oluşturmak zorunda kalmamak anlamına gelebilirdi, her uygulama daha basit ve mevcut sunucu tarafı izinler sistemime düzgün bir şekilde sığardı. Bununla birlikte, çok daha az esnek olur ve birçok dosya nedeniyle aynı satıcı kodunu birden çok kez sunmak anlamına gelir.

Hangi yaklaşımı kullanmalıyım?

+0

Bir kullanıcı için istemci kodunu "kesmek" ve görememesi gereken bir sayfa görmek gerçekten önemli değil, çünkü bu uç noktadaki herhangi bir veriyi sunucudan alamayacak. – whitep4nther

+0

Bu doğru, söylediğim şey buydu, ancak bu soruyla gerçekten alakalı değil. Sadece geldiği zaman bunu açıklığa kavuşturmak istedim. – user128216

+0

Sadece uygulamanın bu kısmına erişimi kısıtlamak istiyorsanız, sadece kullanıcı erişim düzeyine bağlı olarak bir Bağlantı koymayın (bu bir izin sistemi değildir, sadece bir hde/show).Dahası, hatta daha da kötüye erişimi kısıtlamak isterseniz, her izin seviyesi için birden fazla grup oluşturduğunuzu söylediğiniz gibi, ya da DOM'yi tembel bir şekilde getirdiğinizde biraz daha karmaşık olacaktır. İlk çözümde yanlış bir şey görmüyorum; – whitep4nther

cevap

1

Yorumlarınızla ilgili olarak, bir bileşenin izin düzeyine göre gösterilmesine/gösterilmemesine karar vermenin basit bir çözümü, bir sarma bileşeni oluşturmaktır.

... 

let DumbPermissionLevel = ({userLevel, levelRequired, children}) => { 
    if (userLevel < levelRequired) 
     return null; 
    return children; 
}; 

let PermissionLevel = connect(
    (state) => ({ 
     userLevel: state.user.permissionLevel // Wherever your user permission level is stocked in your state 
    }) 
)(DumbPermissionLevel); 

... 

Daha sonra sadece bu gibi kullanabilirsiniz: Elbette

const LARVA = 0; 
const MODERATOR = 1; 
const ADMIN = 2; 
... 
<p>Everybody will see this.</p> 

<PermissionLevel levelRequired={MODERATOR}> 
    <p>Only moderators and admin will see this !</p> 
</PermissionLevel> 

<PermissionLevel levelRequired={ADMIN}> 
    <p>Only admins will see this !</p> 
</PermissionLevel> 

, bu istemci koduna arka uç sunucudan kullanıcı izni düzeyinde iletmek anlamına gelir.
Bunun için createStore() ikinci bağımsız değişkenine bakın.

+1

Bu umut verici görünüyor. Şu anda buna gerçekten bakamıyorum çünkü işte değilim, ancak izinleri kontrol eden bir tür sarıcı bileşeni oluşturmak basit ve yapılabilir. Pazartesi gel, bunu deneyeceğim ve benim için çalışıp çalışmadığını göreceğim. Teşekkürler! – user128216

İlgili konular